题解:P6458 [COCI2006-2007#5] LIGA
Crewmateqaq · · 题解
思路
暴力。
可以利用三重循环来爆搜。每次循环之后将求出的结果进行判断,看是否可取,如果可取就跳出循环。
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;//撒花!
}