Hangzhou Electric OJ 1172 (C ++)

The title given time is very abundant, so the use of brute force.

Analyzing the sequence number 1000 to 9999 the number of all meet guess. If you happen to 1, the speculation success; otherwise it is impossible to guess.

#include <iostream>
#include <algorithm>
using namespace std;
const int BASE = 10;
const int MAXN = 100;

int A[MAXN], B[MAXN], C[MAXN]; //输入
int cnt1[BASE], cnt2[BASE]; //猜对数字的个数

//判断num是否满足第k次猜测
bool judge(int num, int k)
{
    memset(cnt1, 0, sizeof(cnt1));
    memset(cnt2, 0, sizeof(cnt2));

    int cnt = 0; //对应位相同数字的个数
    int guess = A[k]; //本次猜测的数
    for (int i = 1; i <= 4; i++)
    {
        int r1 = num % BASE;
        int r2 = guess % BASE;
        if (r1 == r2) //对应位相同
            ++cnt;
        num /= BASE;
        guess /= BASE;

        cnt1[r1]++;
        cnt2[r2]++;
    }

    if (cnt == C[k])
    {
        int sum = 0; //猜对数字的个数
        for (int i = 0; i < BASE; i++)
            sum += min(cnt1[i], cnt2[i]);

        return sum == B[k];
    }
    else
        return false;
}

int main()
{
    int N;
    int ans, cnt; //最终答案,满足猜测的答案数
    while (cin >> N)
    {
        if (N == 0)
            break;
        for (int i = 0; i < N; i++)
        {
            cin >> A[i] >> B[i] >> C[i];
        }
        ans = cnt = 0;
        for (int num = 1000; num < 9999 && cnt < 2; num++)
        {
            int i;
            for (i = 0; i < N; i++) //对num测试所有猜测
            {
                if (!judge(num, i))
                    break;
            }
            if (i == N) //num满足所有猜测
            {
                ++cnt;
                ans = num;
            }
        }

        if (cnt == 1) //满足猜测的数的个数为1
            cout << ans << endl;
        else
            cout << "Not sure" << endl;
    }
    return 0;
}

Keep up.

Published 138 original articles · won praise 1 · views 7028

Guess you like

Origin blog.csdn.net/Intelligence1028/article/details/104540814