CodeForces #300 B Quasi Binary

大致题意:给定一个整数,比如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;
}

很多优秀的处理办法不一定拘束于数字,也可以把数字当做字符串来处理,降低思考难度。

posted on 2015-05-03 01:22  Bei_insomia  阅读(162)  评论(0编辑  收藏  举报

导航