低碳生活大奖赛
2013-11-11 01:27
239 查看
题目描述:
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:00101 10011 就是可能的情况。
思考:
子集思想
1.本题目中,10道题目都要做;
2.每种题目有两种可能:0(错) 和 1(对),对每种可能都要进行相应处理,每返回一层,都要恢复之前的分数状态;
3.本题递归是以题号来递归的,每做完一道题,cur + 1递归进入下一层;
4.小技巧:利用二维数组来保存结果。
代码:
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:00101 10011 就是可能的情况。
思考:
子集思想
1.本题目中,10道题目都要做;
2.每种题目有两种可能:0(错) 和 1(对),对每种可能都要进行相应处理,每返回一层,都要恢复之前的分数状态;
3.本题递归是以题号来递归的,每做完一道题,cur + 1递归进入下一层;
4.小技巧:利用二维数组来保存结果。
代码:
#include<stdio.h> #include<stdlib.h> int score = 10; int sum = 0; int a[10], group[500][10]; void problems(int *a, int cur); int main(void) { int i, j; problems(a, 0); printf("sum = %d\n", sum); for(i = 0; i < sum; i++) { for(j = 0; j < 10; j++) printf("%d", group[i][j]); printf("\n"); } return 0; } void problems(int *a, int cur) //cur当前题号 - 1; { int i; if(cur == 10)// { if(score == 100) { sum ++; for(i = 0; i < 10; i++) group[sum - 1][i] = a[i]; } } else { a[cur] = 1; score = score * 2; problems(a, cur + 1); score = score / 2; a[cur] = 0; score = score - cur - 1; problems(a, cur + 1); score += cur + 1;//忘记加回去了; }//else }
相关文章推荐
- 查找和下载相关包
- [Windows驱动开发](五)内核内存管理
- [Windows驱动开发](四)Windows驱动框架
- 贝叶斯,待续
- 二叉树宽度和高度
- 德国波恩出差记(三)
- [Windows驱动开发](三)Windows驱动开发常用的数据结构
- 背包九讲
- Irrlicht学习备忘录——9 Meshviewer
- 在android真机上运行cocos2d-html5-2.2自带的HelloHTML5World和其它demo
- 心路历程————LinuxBash
- 实验10 指针2。
- N皇后
- 作业5 指针应用1。
- 实验9 指针1。
- 作业4 函数应用。
- 作业5 指针应用1
- 作业4 函数应用
- Boni Satani谈迁移遗留系统的5个原因
- git中如何查看一个文件的修改(更新)历史