版权声明:本文为博主原创文章,转载请务必注明出处和作者,谢谢合作! https://blog.csdn.net/zhanshen112/article/details/84311167
题目
1006 换个格式输出整数 (15 point(s))
让我们用字母
B
来表示“百”、字母S
表示“十”,用12...n
来表示不为零的个位数字n
(<10),换个格式来输出任一个不超过 3 位的正整数。例如234
应该被输出为BBSSS1234
,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:
每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出格式:
每个测试用例的输出占一行,用规定的格式输出 n。
输入样例 1:
234
输出样例 1:
BBSSS1234
输入样例 2:
23
输出样例 2:
SS123
算法
这个题目难度倒是不大,无论通过什么方法都能解决。
方法1是从C的角度出发,建立对应的数组。
方法2是从string类的角度出发,判断输入是几位数字,这里要先将数字转化为字符串,用到了一个很好用的to_string(),这个函数要包含在<string>中。
方法3是柳婼大神的思路,显然使用while将各位数字取出来,再输出也是一个好方法。
思路
方法1
//pat1006V1
#include <stdio.h>
int main(){
int value,i,bai,shi,ge; //value save the user's input
char BaiArray[][10]={"B","BB","BBB","BBBB","BBBBB","BBBBBB","BBBBBBB","BBBBBBBB","BBBBBBBBB"};
char ShiArray[][10]={"S","SS","SSS","SSSS","SSSSS","SSSSSS","SSSSSSS","SSSSSSSS","SSSSSSSSS"};
char GeArray[][10]={"1","12","123","1234","12345","123456","1234567","12345678","123456789"};
scanf("%d",&value);
ge=value%10;
shi=value/10%10;
bai=value/100;
// printf("%d %d %d\n",bai,shi,ge);
for(i=0;i<9;i++)
if(bai==i+1)
printf("%s",BaiArray[i]);
for(i=0;i<9;i++)
if(shi==i+1)
printf("%s",ShiArray[i]);
for(i=0;i<9;i++)
if(ge==i+1)
printf("%s",GeArray[i]);
return 0;
}
方法2
#include <iostream>
#include <string>
using namespace std;
int main(){
int n; cin>>n;
char c[2]={'S','B'};
string str=to_string(n);
if(str.length() ==1){
for(int i=1;i<=n;i++)
cout<<i;
}
if(str.length() ==2){
for(int i=0;i<n/10;i++)
printf("%c",c[0]);
for(int i=1;i<=n%10;i++)
cout<<i;
}
if(str.length() ==3){
for(int i=0;i<n/100;i++)
printf("%c",c[1]);
for(int i=0;i<n%100/10;i++)
printf("%c",c[0]);
for(int i=1;i<=n%100%10;i++)
cout<<i;
}
return 0;
}
方法3
#include <iostream>
#include <string>
using namespace std;
int main(){
int n,i=0; cin>>n;
int b[3]={0};
while(n){
b[i++]=n%10; //依次取出最后一位数字
n/=10;
}
for(int j=0;j<b[2];j++) cout<<"B";
for(int j=0;j<b[1];j++) cout<<"S";
for(int j=0;j<b[0];j++) cout<<j+1;
return 0;
}