B1018 锤子剪刀布 (20 分)

思路:

题解一个比较巧妙的地方: 如何判断石头剪刀布的谁胜谁负呢 ?

通过下面代码,将所出的转换为数字012,然后通过此处 (k1 + 1) % 3 == k2 可以判断出是谁赢。

int change(char c){
	if(c == 'B') return 0;
	else if(c == 'J') return 1;
	else if(c == 'C') return 2;
}

代码

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int change(char c){
    
    
	if(c == 'B') return 0;
	else if(c == 'J') return 1;
	else if(c == 'C') return 2;
}

int main(int argc, char** argv) {
    
    
	int n;
	char c1, c2; //  从 c1 c2 是甲乙出的手势 
	int k1, k2; // k1 k2 是甲乙转换手势对应的数字 
	int timesA[3] = {
    
    0}, timesB[3] = {
    
    0}; //甲乙 胜 平 输 
	int handsA[3] = {
    
    0}, handsB[3] = {
    
    0}; //甲乙胜时用的手 
	cin >> n; 
	while(n--){
    
    
		getchar();
		cin >> c1 >> c2;
		k1 = change(c1);
		k2 = change(c2);
		if( (k1 + 1) % 3 == k2){
    
     //乙赢 
			timesA[2]++;
			timesB[0]++;
			handsB[k2]++;
		} else if(k1 == k2){
    
     //平局 
			timesA[1]++;
			timesB[1]++; 
		} else {
    
     //乙赢 
			timesA[0]++;
			timesB[2]++;
			handsA[k1]++; 
		}
	}
	printf("%d %d %d\n",timesA[0], timesA[1], timesA[2]);
	printf("%d %d %d\n",timesB[0], timesB[1], timesB[2]);
	int id1 = 0, id2 = 0;
	for(int i = 0; i < 3; i++){
    
    
		if(handsA[i] > handsA[id1]) id1 = i;
		if(handsB[i] > handsB[id2]) id2 = i;
	}

	char mp[3] = {
    
    'B','J','C'};

	cout << mp[id1] << " " << mp[id2];
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/113785470