计蒜客 T1096 石头剪刀布–C语言

计蒜客 - T1096 - 石头剪刀布


题目

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小 AA 和小 BB 正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小 AA 和小 BB 比了 NN 轮之后,谁赢的轮数多?

思路

存储小A和小B的出拳规律 然后进行比较 因为他们的出拳是有周期性规律的 所以循环两个人的出拳规律直到比到N轮

代码

#include <stdio.h>

void main()
{
	int n, a, b, i,j=0,k=0, al[100], bl[100],aw=0,bw=0;
	scanf("%d %d %d", &n, &a, &b);//获取比较的轮数,小 AA 出拳的周期长度,小 BB 出拳的周期长度。
	//获取小A出拳规律
	for (i = 0; i < a; i++) {
		scanf("%d",&al[i]);
	}
	//获取小B出拳规律
	for (i = 0; i < b; i++) {
		scanf("%d",&bl[i]);
	}
	//循环两个人的出拳规律进行比较
	for (i = 1; i <= n; i++) {//比的轮数
		if ((i > a) && (i % a == 1)) j = 0;//当轮数大于小A的周期长度并且轮数对周期长度取模等于一时,小A的出拳周期规律从头开始。
		if ((i > b) && (i % b == 1)) k = 0;//当轮数大于小B的周期长度并且轮数对周期长度取模等于一时,小B的出拳周期规律从头开始。
		if (al[j] == bl[k]) {//如果两个人出的一样就直接进入下一轮。
			j++, k++;
			continue;
		}
		//如果两个人出拳满足这些情况就是小A赢。
		else if (((al[j] == 0) && (bl[k] == 2)) || ((al[j] == 2) && (bl[k] == 5)) || ((al[j] == 5) && (bl[k] == 0))) aw++;
		else bw++;//否则不满足就是小B赢
		j++, k++;
	}
	if (aw > bw) printf("A");
	if (aw < bw) printf("B");
	if (aw == bw) printf("draw");
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>