这个题很简单,但我还是整了一阵子。
第一次我写的程序是使用三个if语句。
#include<iostream>
using namespace std;
int main()
{
int x;
cin>>x;
if(x<10)
{
for(int i=1;i<=x;i++)
cout<<i;
}
if(9<x&&x<100)
{
int gewei=x%10;
x=x/10;
int shiwei=x%10;
for(int i=1;i<=shiwei;i++)
cout<<'S';
for(int i=1;i<=gewei;i++)
cout<<i;
}
if(99<x&&x<1000)
{
int gewei=x%10;
x=x/10;
int shiwei=x%10;
x=x/10;
int baiwei=x%10;
for(int i=1;i<=baiwei;i++)
cout<<'B';
for(int i=1;i<=shiwei;i++)
cout<<'S';
for(int i=1;i<=gewei;i++)
cout<<i;
}
}
但我嫌这个麻烦,所以想优化一下算法(不知道这算不算算法,我太菜了)。
-
我认真分析了一下题目要求,得出步骤
-
1.输入进来一个数字,这个数字<1000
2.将这个数字分离出来,百位是百位,十位是十位,个位是个位
3.对这三个数字进行不同的输出操作
这是题解的代码:
#include <iostream>
using namespace std;
int main()
{
int a, i = 0;
cin >> a;
int b[3] = {0};
while (a != 0)
{
b[i++] = a % 10;
a = a / 10;
}
for (int k = 0; k < b[2]; k++)
cout << "B";
for (int k = 0; k < b[1]; k++)
cout << "S";
for (int k = 0; k < b[0]; k++)
cout << k + 1;
return 0;
}
-
我的分析:
-
直接使用一个整数来接收我们的数字
然后再使用一个整数数组来分离这三个数
然后进行输出操作
我在想
- 能不能使用一个char类型来接收数字,然后再进行类型转换为整形,显然这是麻烦了,但有一点是可以避免对整数的各位数字进行分离。
#include<iostream>
using namespace std;
int main()
{
char shuzu[4]={'0','0','0','0'};
cin>>shuzu;
int shuzi[4]={0,0,0,0};
for(int i=0;i<3;i++)
{
shuzi[i]=shuzu[2-i]-'0';
}
for(int i=1;i<=shuzi[2];i++)
cout<<'B';
for(int i=1;i<=shuzi[1];i++)
cout<<'S';
for(int i=1;i<=shuzi[0];i++)
cout<<i;
}
但我在提交的时候,会显示部分出错,我自己试的时候,输入10会输出B。
研究了,很久,还是没有找出问题。
以后再说吧。