- 题目
题目描述
六面的骰子
骰子的六个面分别为1,2,3,4,5,6点。
大话骰游戏的规则如下:
有6颗骰子
你可以说自己有多少个某种点数的骰子,比如说“3个6”,“5个1”。
计数的时候,1点可以做任意的点数的骰子。比如说你有2个1点,4个6点,如果你说你有“6个6”说的是真话。
现在知道6颗骰子的点数和说的话,请判断话的真伪(该点数的骰子不够这么多个就是假话,否则为真话)。
输入
第一行是一个整数T(1≤T≤100),表示样例的个数。 每个样例的第一行是两个整数,第一个是六位整数,每个位上是数码1∼6,表示你的6颗骰子的点数,第二个整数是你说话的数量m(1≤m≤10)。 以后的m行,每行两个整数n(1≤n≤6),k(1≤k≤6),表示你说的话是“你有n个k点骰子”。
输出
依次输出每个样例中对于话真假的判断,输出格式是"x:s",x表示话的序号,从1开始,s表示判断结果,如果是真话,输出true,否则输出false。 每个样例的结尾输出一个空行。
样例输入
2
123456 6
1 1
2 1
1 2
2 3
2 4
3 5
111111 6
6 6
6 5
6 4
6 3
6 2
6 1
样例输出
1:true
2:false
3:true
4:true
5:true
6:false
这里有一个空行
1:true
2:true
3:true
4:true
5:true
6:true
- 解法
按照题目意思写即可,我的代码如下。
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, char const **argv) {
int T;
cin >> T;
while(T--) {
int a,m,n,k,cnt=0;
//样例个数
cin >> a;
//存储点数
int arr[6];
while(a) {
arr[cnt++] = a%10;
a/=10;
}
//计数器
int cntk = 1;
//说话的数量
cin >> m;
while(m--) {
bool flag = true;
//n个k点骰子
cin >> n >> k;
int temp = 0;
for(int i = 0; i < cnt; i++) {
if(arr[i]==k) {
temp++;
}
}
//如果k不是一点(因为一点可以变成任何一点)
if(k != 1) {
if(temp < n) {
int cntc = 0;
for(int i = 0; i < cnt; i++) {
if(arr[i] == 1) {
cntc++;
}
}
if(cntc+temp < n) {
flag = false;
}
}
} else {
if(temp < n) {
flag = false;
}
}
if(flag) {
cout << cntk++ << ":" << "true" << endl;
} else {
cout << cntk++ << ":" << "false" << endl;
}
}
cout << endl;
}
return 0;
}