98%的人一小时也做不出来的题目
据说这是98%的人一小时也做不出来的题目。在网上看见,一时技痒,编了个程序来解,总算落到那2%里面了。哈哈。
请回答下面10个问题:
1、第一个答案是b的问题是哪一个?
(a)2;(b) 3;(c)4;(d)5;(e)6
2、唯一的连续两个具有相同答案的问题是:
(a)2,3;(b)3,4;(c)4,5;(d)5,6;(e)6,7
3、本问题答案和哪一个问题的答案相同?
(a)1;(b)2;(c)4;(d)7;(e)6
4、答案是a的问题的个数是:
(a)0;(b)1;(c)2;(d)3;(e)4
5、本问题答案和哪一个问题的答案相同?
(a)10;(b)9;(c)8;(d)7;(e)6
6、答案是a的问题的个数和答案是什么的问题的个数相同?
(a)b;(b)c;(c)d;(d)e;(e)以上都不是
7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
(a)4;(b)3;(c)2;(d)1;(e)0。(注:a和b相差一个字母)
8、答案是元音字母的问题的个数是:
(a)2;(b)3;(c)4;(d)5;(e)6。(注:a和e是元音字母)
9、答案是辅音字母的问题的个数是:
(a)质数;(b)阶乘数;(c)平方数;(d)立方数;(e)5的倍数
10、本问题的答案是:
(a)a;(b)b;(c)c;(d)d;(e)e
唯一的答案是CDEBEEDCBA,算法如下:
#include <stdio.h> int a[10]; void select(int n, int answer); void main() { int i; for (i = 'a'; i <= 'e'; i++) select(0, i); } void select(int n, int answer) { int i; int same, pos; int asum, bsum, csum, dsum, esum; int diff; a[n] = answer; if (n < 9) { for (i = 'a'; i <= 'e'; i++) select(n + 1, i); return; } /* 1 */ for (i = 0; i < 6; i++) if (a[i] == 'b') break; if (i < 1 || i > 5 || a[0] != 'a' + i - 1) return; /* 2 */ same = 0; pos = 0; for (i = 0; i < 9; i++) if (a[i] == a[i+1]) { if (same) return; same = 1; pos = i; } if (pos < 1 || pos > 5 || a[1] != 'a' + pos - 1) return; /* 3 */ if (a[2] == 'a' && a[0] != a[2]) return; if (a[2] == 'b' && a[1] != a[2]) return; if (a[2] == 'c' && a[3] != a[2]) return; if (a[2] == 'd' && a[6] != a[2]) return; if (a[2] == 'e' && a[5] != a[2]) return; /* 4 */ asum = 0; bsum = 0; csum = 0; dsum = 0; esum = 0; for (i = 0; i < 10; i++) { switch (a[i]) { case 'a': asum++; break; case 'b': bsum++; break; case 'c': csum++; break; case 'd': dsum++; break; case 'e': esum++; break; } } if (asum != a[3] - 'a') return; /* 5 */ if (a[9+'a'-a[4]] != a[4]) return; /* 6 */ if (asum == bsum && a[5] != 'a') return; if (asum == csum && a[5] != 'b') return; if (asum == dsum && a[5] != 'c') return; if (asum == esum && a[5] != 'd') return; if ((asum == bsum || asum == csum || asum == dsum) && a[5] == 'e') return; if ((bsum == csum || csum == dsum || dsum == esum || esum == bsum || esum == csum || bsum == dsum) && a[5] != 'e') return; /* 7 */ diff = a[6] - a[7] > 0 ? a[6] - a[7] : a[7] - a[6]; if (a[6] != 4 - diff + 'a') return; /* 8 */ if (asum + esum < 2 || asum + esum > 6 || a[7] != 'a' + asum + esum - 2) return; /* 9 */ switch (bsum + csum + dsum) { case 3: case 7: if (a[8] != 'a') return; break; case 4: case 9: if (a[8] != 'c') return; break; case 6: if (a[8] != 'b') return; break; case 8: if (a[8] != 'd') return; break; case 10: if (a[8] != 'e') return; break; default: return; } /* 10 */ /* print solution */ for (i = 0; i < 10; i++) putchar(a[i]); putchar('\n'); }