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');
}
评论关闭