C语言题目,
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(...
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
#include<stdio.h>
int fun(int x,int y,int z)
//x为当前分数,y为题目序号,z为当前题目是对还是错。
//1表示答对,0表示答错
{
if(z) x*=2;
else x-=y;
return x;
}
void main()
{
int A,B,C,D,E,F,G,H,I,J;
int i,score=10;
for(i=1;i<=10;i++)
{
for(A=0;A<2;A++)
{
score=fun(score,i,A);
for(B=0;B<2;B++)
{
score=fun(score,i,B);
for(C=0;C<2;C++)
{
score=fun(score,i,C);
for(D=0;D<2;D++)
{
score=fun(score,i,D);
for(E=0;E<2;E++)
{
score=fun(score,i,E);
for(F=0;F<2;F++)
{
score=fun(score,i,F);
for(G=0;G<2;G++)
{
score=fun(score,i,G);
for(H=0;H<2;H++)
{
score=fun(score,i,H);
for(I=0;I<2;I++)
{
score=fun(score,i,I);
for(J=0;J<2;J++)
{
score=fun(score,i,J);
if(score==100)
printf("%d%d%d%d%d%d%d%d%d%d\n",A,B,C,D,E,F,G,H,I,J);
}
}
}
}
}
}
}
}
}
}
}
}
帮忙看一下这个程序有什么问题??这个程序运行什么都输不出 展开
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
#include<stdio.h>
int fun(int x,int y,int z)
//x为当前分数,y为题目序号,z为当前题目是对还是错。
//1表示答对,0表示答错
{
if(z) x*=2;
else x-=y;
return x;
}
void main()
{
int A,B,C,D,E,F,G,H,I,J;
int i,score=10;
for(i=1;i<=10;i++)
{
for(A=0;A<2;A++)
{
score=fun(score,i,A);
for(B=0;B<2;B++)
{
score=fun(score,i,B);
for(C=0;C<2;C++)
{
score=fun(score,i,C);
for(D=0;D<2;D++)
{
score=fun(score,i,D);
for(E=0;E<2;E++)
{
score=fun(score,i,E);
for(F=0;F<2;F++)
{
score=fun(score,i,F);
for(G=0;G<2;G++)
{
score=fun(score,i,G);
for(H=0;H<2;H++)
{
score=fun(score,i,H);
for(I=0;I<2;I++)
{
score=fun(score,i,I);
for(J=0;J<2;J++)
{
score=fun(score,i,J);
if(score==100)
printf("%d%d%d%d%d%d%d%d%d%d\n",A,B,C,D,E,F,G,H,I,J);
}
}
}
}
}
}
}
}
}
}
}
}
帮忙看一下这个程序有什么问题??这个程序运行什么都输不出 展开
2个回答
展开全部
楼主你好 你这个算法太麻烦了 我给你一个简单的吧哈
解题思路:
首先不难发现对于一个分数 可能的答题情况有:2^10 = 1024种 正确为1,错误为0
显然这就需要用到二进制数了 也就是遍历整数:0~1023 每一个整数的二进制数代表一个答题方案
(0就表示0000000000 十道题全错;1023表示1111111111 十道题全对)
具体代码如下:
#include<stdio.h>
void fun(int n,int score)//输出答题情况
{
int a[11],i=1,k=512,sum=10;
while(i<11)//求出当前答题情况的二进制表达式(正序求余)
{
a[i]=(n/k)%2;
sum=a[i]?sum*2:sum-i;
k/=2;
i++;
}
if(sum == score)//如果当前分数等于预定分数 就输出答题情况
{
for(i=1;i<11;i++)
printf("%d",a[i]);
printf("\n");
}
}
int main()
{
int i,score;
printf("Enter the score:");
scanf("%d",&score);
for(i=0;i<1024;i++)//遍历所有的答题情况
fun(i,score);
return 0;
}
希望能帮助你哈
解题思路:
首先不难发现对于一个分数 可能的答题情况有:2^10 = 1024种 正确为1,错误为0
显然这就需要用到二进制数了 也就是遍历整数:0~1023 每一个整数的二进制数代表一个答题方案
(0就表示0000000000 十道题全错;1023表示1111111111 十道题全对)
具体代码如下:
#include<stdio.h>
void fun(int n,int score)//输出答题情况
{
int a[11],i=1,k=512,sum=10;
while(i<11)//求出当前答题情况的二进制表达式(正序求余)
{
a[i]=(n/k)%2;
sum=a[i]?sum*2:sum-i;
k/=2;
i++;
}
if(sum == score)//如果当前分数等于预定分数 就输出答题情况
{
for(i=1;i<11;i++)
printf("%d",a[i]);
printf("\n");
}
}
int main()
{
int i,score;
printf("Enter the score:");
scanf("%d",&score);
for(i=0;i<1024;i++)//遍历所有的答题情况
fun(i,score);
return 0;
}
希望能帮助你哈
追问
我比较想知道我的程序有什么错误??
展开全部
首先,你这程序最后并没有把成绩复位,所以之后算的数基本都没用了
c++写的 楼主可以尝试转为c
int main()
{
int answer[11]={0};
const int score=100;
int p,q,base=10;
for(int i=1;i<1024;i++)
{
for(p=1;p<11;p++)
if(answer[p])
base*=2;
else
base-=p;
if(base==score)
{
for(p=1;p<11;p++)
cout <<answer[p]<<" ";
cout <<endl;
}
for(p=1;p<11;p++)
answer[p]=0;
q=i;
for(p=1;p<11;p++)
if(q)
{
answer[p]=q%2;
q/=2;
}
else
answer[p]=0;
base=10;
}
}
c++写的 楼主可以尝试转为c
int main()
{
int answer[11]={0};
const int score=100;
int p,q,base=10;
for(int i=1;i<1024;i++)
{
for(p=1;p<11;p++)
if(answer[p])
base*=2;
else
base-=p;
if(base==score)
{
for(p=1;p<11;p++)
cout <<answer[p]<<" ";
cout <<endl;
}
for(p=1;p<11;p++)
answer[p]=0;
q=i;
for(p=1;p<11;p++)
if(q)
{
answer[p]=q%2;
q/=2;
}
else
answer[p]=0;
base=10;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询