看到一份小学题,表示难度很大。http://weibo.com/2258727970/A1tmlep9T
1.先暴力枚举一道:
int bitArr[10]; void addBit(int num) { while (num > 0) { bitArr[num % 10]++; num = num / 10; } } bool adjustBit() { if (bitArr[0] == 0) { bool bRet = true; for (int i=1; i<=9; i++) { if (bitArr[i] != 1) { bRet = false; break; } } return bRet; } else { return false; } } /* _ _ _ _ _ - _ _ _ _ = 3 3 3 3 3 填入1-9,不能重复 */ void run() { for (int i=1234; i<=9876; i++) { memset(bitArr, 0, sizeof(int) * 10); addBit(i); addBit(i+33333); if (adjustBit()) { printf("%5d - %5d ", i+33333, i); } } }
2. 鬼谷子那道题先分析一下
// 2-99中随机找两个数。将和告诉A,乘积告诉B. // A说:我不知道,但我知道你也不知道 // B说:我知道了 // A说:我也知道了 /* 1.A不知道,说明A拿到的数不是5(2+3)或197(98+99) A知道B不知道,说明A拿到的数不是两个质数的和。 (如果B拿到的数是两个质数的积,那么B可以确定是那两个数) 2.B拿到的数分解质因数以后(大于等于3个数),将因数分成两份,求和。这个结果至少有3个,其他都排除了 */