第三届_电视台答题
2016-02-26 22:24
260 查看
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。
递归实现代码如下:
#include<stdio.h> int main() { int mark; int a[10]; for(a[1]=0; a[1]<=1; a[1]++) for(a[2]=0; a[2]<=1; a[2]++) for(a[3]=0; a[3]<=1; a[3]++) for(a[4]=0; a[4]<=1; a[4]++) for(a[5]=0; a[5]<=1; a[5]++) for(a[6]=0; a[6]<=1; a[6]++) for(a[7]=0; a[7]<=1; a[7]++) for(a[8]=0; a[8]<=1; a[8]++) for(a[9]=0; a[9]<=1; a[9]++) for(a[10]=0; a[10]<=1; a[10]++) { mark=10; for(int i=1; i<=10; i++) { if(a[i]==0) mark-=i; else mark*=2; } if(mark==100) { for(int i=1; i<=10; i++) printf("%d",a[i]); printf("\n"); } } return 0; }
递归实现代码如下:
</pre><pre name="code"><span>#include <iostream> #include <cstdio> using namespace std; int record[11]; void dfs(int i,int score) { if(score<0) return; if(i==11)//这里应该是11,而不是10 { if(score==100) {for(int k=1;k<=10;k++) printf("%d",record[k]); printf("\n"); } return; } record[i]=0; dfs(i+1,score-i); record[i]=1; dfs(i+1,score*2); } int main() { int score=10; dfs(1,10); return 0; }</span>
相关文章推荐
- PHP-003
- [android] 帧布局
- C基础——文本格式和二进制格式的区别
- 软件工程师的定义
- 内存分析
- uva10132 - File Fragmentation
- Service入门:进程的优先级
- github
- strcpy函数与memcpy函数实现
- 计算NandFlash要传入的行地址和列地址
- 第三届_海盗喝酒
- python微信公众账号二次开发
- java 如何实现一个字符串的反转
- Java多线程Lock对象常用方法(1)
- SVN错误:cannot show diff because of inconsistent of newline in the file 的解决方法
- Ajax发送和接收请求
- C++栈的初始化,入栈,出栈,获取栈顶元素等操作
- android的监控日志和测试程序(logcat和强制抛错)
- 修改数据表
- 蒜头爬楼梯