CSP考试 2013年12月第4题 C语言实现
2016-04-04 16:41
302 查看
#include <stdio.h> main() { int wr; scanf("%d",&wr); //输入位数 //printf("%d\n",wr); int i; int shu1=1; for(i=0;i<wr;i++) { shu1=10*shu1; } int shu2=shu1; shu1=2*shu1/10; //printf("%d\n",shu1); //printf("%d\n",shu2); int shu; int kaoshi=0; for(shu=shu1;shu<shu2;shu++) { int w=1; int i; for(i=0;i<wr;i++) { w=10*w; } w=w/10; //printf("%d\n",w); int bb=w;//bb存储不变的位数 //第1个条件 int flag=0; int pj0=0;//这四个数至少出现一次 int pj1=0; int pj2=0; int pj3=0; for(i=0;i<wr;i++) { //printf("(shu/w)%10 = %d\n",(shu/w)%10); if(((shu/w)%10==0)||((shu/w)%10==1)||((shu/w)%10==2)||((shu/w)%10==3))//只包含0,1,2,3 { if((shu/w)%10==0) { pj0=1; } if((shu/w)%10==1) { pj1=1; } if((shu/w)%10==2) { pj2=1; } if((shu/w)%10==3) { pj3=1; } flag=1; w=w/10; }else { flag=-1; break; } } //printf("flag = %d\n",flag); w=bb; if((flag==1)&&(pj0==1)&&(pj1==1)&&(pj2==1)&&(pj3==1)) { //第二个条件中第一个小条件 //printf("tiaojian1\n"); int f=0; int err=0; for(i=0;i<wr;i++) { //printf("(shu/w)%10 = %d\n",(shu/w)%10); if(f==0) { if((shu/w)%10==1)// 寻找第一个1的位置 { f=1; } } else if(f==1) { if((shu/w)%10==0)//寻找1后有没有0 { err=1; break; } } w=w/10; } if(err==1) { continue; } //第二个条件中第二个小条件 w=bb; //printf("tiaojian2\n"); f=0; err=0; for(i=0;i<wr;i++) { //printf("(shu/w)%10 = %d\n",(shu/w)%10); if(f==0) { if((shu/w)%10==3)// 寻找第一个3的位置 { f=1; } } else if(f==1) { if((shu/w)%10==2)//寻找3后有没有2 { err=1; break; } } w=w/10; } if(err==1) { continue; } kaoshi++; } } //printf("kaoshi %d",kaoshi); printf("%d",kaoshi); }