XTUOJ-1300-Dice

  1. 题目

题目描述
六面的骰子
XTUOJ-1300-Dice_第1张图片
骰子的六个面分别为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

  1. 解法
    按照题目意思写即可,我的代码如下。
#include 
#include 
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;
}

你可能感兴趣的:(XTUOJ)