题解:P6458 [COCI2006-2007#5] LIGA

· · 题解

思路

暴力。
可以利用三重循环来爆搜。每次循环之后将求出的结果进行判断,看是否可取,如果可取就跳出循环。

AC Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,A[2000][100];
void qiong(int x)//来暴力的函数
{
    int i,j,k;
    for(i = 0;i <= 100;i++)//三重循环
    {
        for(j = 0;j <= 100 - i;j++)
        {
            for(k = 0;k <= 100 - i - j;k++)
            {
                if((i + j + k == A[x][1] || A[x][1] == -1) && (i ==  A[x][2] || A[x][2] == -1) 
                           &&(j == A[x][3] || A[x][3] == -1) &&(k == A[x][4] || A[x][4] == -1)
                                                    &&(i * 3 + j == A[x][5] || A[x][5] == -1))//根据题意进行判断
                { 
                    A[x][2] = i;
                    A[x][3] = j;
                    A[x][4] = k;
                    A[x][1] = i + j + k;
                    A[x][5] = 3 * i + j;
                    break; //如果符合跳出循环
                }
            }
        }
    }
}
int main()
{
    ll i,j,k;
    cin >> n;
    for(i = 1;i <= n;i++)
    {
        for(j = 1;j <= 5;j++)
        {
            string s;
            cin >> s;//string解决换行
            if(s == "?")
            { 
                A[i][j] = -1;//把缺失的部分就标记为-1
                continue; 
            }
            ll sum = 0;
            for(k = 0;k < s.size();k++)
            {
                sum = sum * 10 + s[k] - '0';
            } 
            A[i][j] = sum;
        }
    }
    for(i = 1;i <= n;i++)
    {
        qiong(i);//进行代入
        for(j = 1;j <= 5;j++)
        {
            cout << A[i][j] << " ";//空格别忘了!
        }
        cout << endl;
    }
    return 0;//撒花!
}