大致题意:给定一个整数,比如32,32=11+11+10。。。给定一个整数n,它可以由0 和1 组成的整数的和组成,求最少需要几个这样0 和 1的整数。比如32至少需要3个。
分析:把输入的这个整数当成字符串处理。比如s=“32” s[0]=‘ 3 ‘ ,s[1]=‘ 2 ‘;
那么,我们做一个二维数组。a[][]; 用来存储这个字符串s
例如“ 32 ” 存储为
1 1
1 1
1 0
例如3451 存储为:
1 1 1 1
1 1 1 0
1 1 1 0
0 1 1 0
0 0 1 0
我们只需要把这个二维数组按行输出并忽略前导0 即可。
代码如下:
#include <cstdio> #include <cstring> #include <iostream> #define max(a,b) a>b?a:b using namespace std; int a[10][10]; int main() { string s; cin>>s; int len=s.size(); int i,j,k,cou=0; for(i=0;i<len;i++) { cou=max(cou,s[i]-‘0‘); for(j=0;j<s[i]-‘0‘;j++) a[j][i]=1; }//把输入的n按位存储入二维数组a[][]; //for(i=0;i<cou;i++) //{ // for(j=0;j<len;j++) // printf("%d ",a[i][j]); // printf("\n"); // } printf("%d\n",cou); for(i=0;i<cou;i++) { int flag=0; for(j=0;j<len-1;j++) if(a[i][j]==1||flag==1)//忽略前导0 把数组a内的元素按行输出。 { flag=1; printf("%d",a[i][j]); } printf("%d",a[i][j]); printf(" "); } return 0; }
很多优秀的处理办法不一定拘束于数字,也可以把数字当做字符串来处理,降低思考难度。
时间: 2025-01-02 00:53:49