算法竞赛入门经典第二版 竖式问题 P42

 

#include
using namespace std;
int inset(char *s,int num) { //判断数字是否在数字集中
    int len=strlen(s),i,tmp;
    while(num) {
        tmp=num%10;  //取末尾数字 
        for(i=0; i) {
            if(s[i]-'0'==tmp)   //如果在里面,则跳出for循环 
                break;
        }
        if(i==len)//当i=len的时候,表示已经搜遍s,s里面不存在tmp的末尾数字,则不行 
            return 0;
        num=num/10;
    }
    return 1;
} 
int main() {
    int i,count=0;
    char s[10];
    scanf("%s",s);
    //printf("%s\n",s);

    int abc,de,x,y,z;
    for(abc=111; abc<=999; abc++) {
        for(de=11; de<=99; de++) {
            x=abc*(de%10); //abc乘de的个位
            y=abc*(de/10);//abc乘de的十位
            z=abc*de;
            if(inset(s,abc)&&inset(s,de)&&inset(s,x)&&inset(s,y)&&inset(s,z)) {
                count++;
                printf("<%d>\n", count);
                printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z);
            }
        }
    }
    return 0;
}

 

你可能感兴趣的:(算法竞赛入门经典第二版 竖式问题 P42)