您的位置:首页 > 编程语言 > C语言/C++

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: