usaco 1.3.4 Prime Cryptarithm

来源:互联网 发布:淘宝图片像素是多少 编辑:程序博客网 时间:2024/06/09 14:49

usaco 1.3.4  Prime Cryptarithm

     题意:给定几个数字,如果能用这几个数字来代替乘法竖式,这种牛式成立,统计牛式成立的情况一共有多少种?

     做这道题目可以加深对乘法竖式的理解,开始犯过两个错误,自己仔细想了想发现错了。

     细节+代码:

 

    

/*  ID: 15257142  LANG: C  TASK: crypt1*/ #include<stdio.h>int a[20],b[2000],c[2000],d[2000],n,big[2000],small[2000],mark[20];int judge(int num){int r;while(num>0){r = num%10;if(mark[r]==0)return 0;num = num/10;}return 1;}int main(){freopen("crypt1.in","r",stdin);freopen("crypt1.out","w",stdout);int i,j,k,t,num,r,count;scanf("%d",&n);for(i = 0;i<=9;i++)mark[i] = 0;for(i = 0;i<=n-1;i++){scanf("%d",&a[i]);mark[a[i]] = 1;}t = 0;for(i = 0;i<=n-1;i++){for(j = 0;j<=n-1;j++){for(k = 0;k<=n-1;k++){num = a[i]*100+a[j]*10+a[k];b[t] = num;t++;}}}r = 0;for(i = 0;i<=t-1;i++){for(j = 0;j<=n-1;j++){if(b[i]*a[j]<100||b[i]*a[j]>999)continue;if(judge(b[i]*a[j])==1){d[r] = b[i]*a[j];big[r] = b[i];small[r] = a[j];r++;}}}count = 0;for(i = 0;i<=r-1;i++){for(j = 0;j<=r-1;j++){if(big[i]!=big[j]) //符合要求的数字必须是由同一个三位数乘得的。continue;      //同一个三位数可能是由不同的三位数和个位数乘得的。if(d[i]*10+d[j]<1000||d[i]*10+d[j]>9999)continue;if(judge(d[i]*10+d[j])==1)count++;}}printf("%d\n",count);fclose(stdin);fclose(stdout);return 0;}


 

 

    

 

原创粉丝点击