
给我用c语言讲一下noip火柴棒那道题呗,谢啦~
展开全部
我记得网上有解题报告,就不写完整的代码了;因为数据范围并不大,所以穷举就可以,定义int cnt()函数返回拼成一个数所需火柴数,然后双重循环: //count计数,n为火柴数 int i,j,count=0; for(i=0;i<=1000;i++) for(j=0;j<=1000;j++) { //加数所需火柴 int a=cnt(i),b=cnt(j); //和所需火柴 int c=cnt(i+j); //和可用火柴 int d=n-4-a-b; //若相等 if(c==d) count++; }
展开全部
#include <stdio.h>
int inbit (int ma);
int sort (int
cab);
main()
{
FILE * fp,* jp;
int m,n,i,j;
int
count=0,num=0,total;
fp=fopen("matches.in","r");
fscanf(fp,"%d",&m);
fclose(fp);
if(m<=20)
n=200;
else
n=1000;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
if(inbit(i)+inbit(j)+inbit(i+j)+4==m)
{
if(i==j)
num++;
else
count+=2;
}
}
total=count+num;
jp=fopen("matches.out","w");
fprintf(jp,"%d",total);
fclose(jp);
return
0;
}
int inbit (int ma)
{
int call;
if(ma<10)
call=sort(ma);
else
call=inbit(ma/10)+inbit(ma-(ma/10)*10);
return call;
}
int sort
(int cab)
{
switch (cab)
{
case 0
:
return 6;
break;
case 1 :
return 2;
break;
case 2 :
return
5;
break;
case 3
:
return 5;
break;
case 4 :
return 4;
break;
case 5 :
return
5;
break;
case 6 :
return 6;
break;
case 7
:
return 3;
break;
case 8 :
return 7;
break;
case 9 :
return
6;
break;
};
}
int inbit (int ma);
int sort (int
cab);
main()
{
FILE * fp,* jp;
int m,n,i,j;
int
count=0,num=0,total;
fp=fopen("matches.in","r");
fscanf(fp,"%d",&m);
fclose(fp);
if(m<=20)
n=200;
else
n=1000;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
if(inbit(i)+inbit(j)+inbit(i+j)+4==m)
{
if(i==j)
num++;
else
count+=2;
}
}
total=count+num;
jp=fopen("matches.out","w");
fprintf(jp,"%d",total);
fclose(jp);
return
0;
}
int inbit (int ma)
{
int call;
if(ma<10)
call=sort(ma);
else
call=inbit(ma/10)+inbit(ma-(ma/10)*10);
return call;
}
int sort
(int cab)
{
switch (cab)
{
case 0
:
return 6;
break;
case 1 :
return 2;
break;
case 2 :
return
5;
break;
case 3
:
return 5;
break;
case 4 :
return 4;
break;
case 5 :
return
5;
break;
case 6 :
return 6;
break;
case 7
:
return 3;
break;
case 8 :
return 7;
break;
case 9 :
return
6;
break;
};
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询