小学作业题

看到一份小学题,表示难度很大。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个,其他都排除了
*/
原文地址:https://www.cnblogs.com/matrixchen/p/3211738.html