情况问题奇怪的比赛--蓝桥杯
最近研究情况问题,稍微总结一下,以后继续补充:
简述
这是2012年蓝桥国全件软大赛赛预的第4题,景情是一个计分规矩怪奇的竞赛,问题是已知总分到得每题的答回情况。
标题描述
某电视台举办了低碳生活大奖赛。标题的计分规矩当相怪奇:
每位选手须要答回10个问题(其编号为1到10),越前面越有难度。答对的,以后分数翻倍;答错了则扣掉与题号雷同的分数(选手必须答回问题,不答回按错误处理)。
每位选手都有一个起步的分数为10分。
某得胜选手终最得分刚好是100分,如果不让你看竞赛程过,你能推断出他(她)哪个标题答对了,哪个标题答错了吗?
如果把答对的记为1,答错的记为0,则10个标题的答回情况可以用仅含有1和0的串来表现。例如:0010110011 就是可能的情况。
你的任务是算出全部可能情况。每一个案答占一行。
案答写在“解答.txt”中,不要写在这里!
析分
这个题也是应用穷举法,但是穷举的是每题的答题情况,应用十六进制可以较好的实现。对于分数的算计,应用的是与一个分数组数的与运算。
源代码
# include <stdio.h> int main(void) { int i, j; int comp[10] = {0x200, 0x100, 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1}; int grade; int out[10]; for(i = 0x0; i < 0x400; i++){ grade = 10; for(j = 0; j < 10; j++){ out[j] = 0; if(i & comp[j]){ grade <<= 1; out[j] = 1; } else{ grade -= j + 1; out[j] = 0; } } if(grade == 100){ for(j = 0; j < 10; j++){ printf("%d", out[j]); } putchar('\n'); } } }
最后案答
0010110011
0111010000
1011010000
文章结束给大家分享下程序员的一些笑话语录:
问路
有一个驾驶热气球的人发现他迷路了。他降低了飞行的高度,并认出了地面 上的一个人。他继续下降高度并对着那个人大叫,“打扰一下,你能告诉我我 在哪吗?”
下面那个人说:“是的。你在热气球里啊,盘旋在 30 英尺的空中”。
热气球上的人说:“你一定是在 IT 部门做技术工作”。
“没错”,地面上的人说到,“你是怎么知道的?”
“呵呵”,热气球上的人说,“你告诉我的每件事在技术上都是对的,但对都没 有用”。
地面上的人说,“你一定是管理层的人”。
“没错”,热气球上的人说,“可是你是怎么知道的?”
“呵呵”,地面上的那人说到,“你不知道你在哪里,你也不知道你要去哪,你 总希望我能帮你。你现在和我们刚见面时还在原来那个地方,但现在却是我 错了”。