2012年蓝桥杯【初赛试题】奇怪的比赛

简介:

题目描述:

    某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:

    每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。

    每位选手都有一个起步的分数为10分。

    某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?

    如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。

    你的任务是算出所有可能情况。每个答案占一行。

    答案写在“解答.txt”中,不要写在这里!


思路:我觉得这一题适合用深入搜索递归来做,每一题只有两种情况,对与错,对了,当前成绩就翻倍,错了,当前成绩就减去此题的题号,然后接着向下一个题进行递归(继续两种情况并且继续递归,直到到第10题回答完结束)。判定结束条件是,答完第10题后,成绩刚好为100分的时候,输出10题的对错情况然后结束本次递归,成绩不为100分直接结束本次递归。

那么,怎么输出题目的对错呢,我用的是一个结构体,有一个判定元素flag来判定此题是否对。(后来想想直接用数组存0和1也是可以的,不过结构体在其他类型的判定上也是很有用的)。

正确答案:

1011010000
0111010000
0010110011

AC代码:

#include<stdio.h>
#include<stdlib.h>
struct node
{
  int flag; 
}a[20];
void Test(int n,int m)
{
    int i,j;
    if(n==10)
    {
        if(m==100)
        {
            for(i=1;i<=10;i++)
            printf("%d",a[i].flag);
            puts("");
            return;
        }
        else
        return;
    }
    i=n+1;
    m*=2;a[i].flag=1;
    Test(i,m);
    m/=2;
    m-=i;a[i].flag=0;
    Test(i,m);
    m+=i;
}
int main()
{
    int i,j,n,m=10;
    Test(0,10);
    system("pause");
    return 0;
}


相关文章
|
4月前
|
人工智能 算法 Java
第十三届蓝桥杯B组Java(试题C:字符统计)
第十三届蓝桥杯B组Java(试题C:字符统计)
76 0
|
机器学习/深度学习 算法 C++
2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
388 0
|
4月前
|
机器学习/深度学习 人工智能 算法
2024 蓝桥杯本科B组试题
2024 蓝桥杯本科B组试题
44 0
蓝桥杯Java-B组2015年试题解题笔记
蓝桥杯Java-B组2015年试题解题笔记
|
数据格式
蓝桥杯Java-B组2014年试题解题笔记(下)
蓝桥杯Java-B组2014年试题解题笔记(下)
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-940 试题3971
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-940 试题3971
55 0
|
4月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-659 比赛安排
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-659 比赛安排
42 0
|
4月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制
34 0
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 数列排序(四种语言对照)
37 0
|
4月前
|
Python
第十三届蓝桥杯B组python(试题A:排列字母)
第十三届蓝桥杯B组python(试题A:排列字母)
54 0

相关实验场景

更多