c语言关于递归的问题一道蓝桥杯的问题:某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍;答

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 03:22:18
c语言关于递归的问题一道蓝桥杯的问题:某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍;答

c语言关于递归的问题一道蓝桥杯的问题:某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍;答
c语言关于递归的问题
一道蓝桥杯的问题:某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理).每位选手都有一个起步的分数为10分.某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示.例如:0010110011 就是可能的情况.你的任务是算出所有可能情况.每个答案占一行.
代码:#includeint a[11]={0};void f(int sum,int n);int main(void){ f(10,1); return 0;}void f(int sum,int n){ int i; if(sum==100&&n==11) { for(i=1;i100||n>=11||sum-n

c语言关于递归的问题一道蓝桥杯的问题:某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍;答
#include<stdio.h>
int a[11]={0};
void f(int sum,int n);
int main(void)
{
    f(10,1);
    return 0;
}
void f(int sum,int n)
{
    int i;
    if(sum==100&&n==11)
    {
        for(i=1;i<=10;i++)
        {
            printf("%d",a[i]);
        }
        printf("\n");
        return;
    }
    else if(n>=11||sum<=0)  //这里有改动
    {
        return;
    }
    a[n]=1;
    f(sum*2,n+1);
    a[n]=0;
    f(sum-n,n+1);
}