C/C++编程学习 – 第5周 ④ 石头剪刀布「建议收藏」

C/C++编程学习 – 第5周 ④ 石头剪刀布「建议收藏」题目描述石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?输入格式输入包含三行。第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0

大家好,又见面了,我是你们的朋友全栈君。

题目链接

题目描述

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

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

输入格式
输入包含三行。

第一行包含三个整数:
N,NA,NB,分别表示比了
N 轮,小 A 出拳的周期长度,小 B 出拳的周期长度。0<N,NA,NB<100。

第二行包含 NA 个整数,表示小 A 出拳的规律。

第三行包含 NB 个整数,表示小 B 出拳的规律。

其中,0 表示“石头”,2 表示“剪刀”,5 表示“布”。相邻两个整数之间用单个空格隔开。

输出格式
输出一行,如果小 A 赢的轮数多,输出”A”;如果小 B 赢的轮数多,输出”B”;如果两人打平,输出 “draw”。

提示
对于测试数据,猜拳过程为:

A:0 2 5 0 2 5 0 2 5 0

B:0 5 0 2 0 5 0 2 0 5

A 赢了 4 轮,B 赢了 2 轮,双方打平 4 轮,所以 A 赢的轮数多。

Sample Input

10 3 4
0 2 5
0 5 0 2

Sample Output

A

思路

模拟石头剪刀布的过程,可以写一个函数判断一下谁赢了。

C语言代码:

#include <stdio.h>
#include <math.h>
#include <string.h>
const long long N = 1e6 + 10;
long long n, m, cnt = 0, ans = 0, sum = 0;
long long is_a_win(long long a, long long b)//0石头 2剪刀 5布;//写个函数判断谁赢啦
{ 
   
	if((a == 0 && b == 2) || (a == 2 && b == 5) || (a == 5 && b == 0)) return 1;//A赢啦
	else if(a==b) return 0;//平手
	else return -1;//B赢啦
}
int main()
{ 
   
    long long a[N], b[N], A, B;
	scanf("%lld %lld %lld",&n, &A, &B);
	for(long long i = 0; i < A; i++)//录入A的规律
		scanf("%lld", &a[i]);
	for(long long i = 0; i < B; i++)//录入B的规律
		scanf("%lld", &b[i]);
    for(long long i = 0; i < n; i++)//模拟n场猜拳
    { 
   
    	long long nowa, nowb;//这一局,第i场
    	nowa = a[i % A];//A出的是nowa
    	nowb = b[i % B];//B出的是nowb
    	cnt += is_a_win(nowa, nowb);//a赢啦,cnt就加一,B赢啦,就减一
    }
    if(cnt > 0) printf("A");//cnt>0 说明A赢得多
    else if(cnt < 0) printf("B");//cnt<0 说明B赢得多
    else printf("draw");//cnt==0, 平手 
	return 0;
}

C++代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{ 
   
	int n, a, b, numa[105], numb[105];
	while(cin >> n >> a >> b)
	{ 
   
		int A = 0, B = 0;
		memset(numa, 0, sizeof(numa));
		memset(numb, 0, sizeof(numb));
		for(int i = 0; i < a; i++)
			cin >> numa[i];
		for(int i = 0; i < b; i++)
			cin >> numb[i];
		for(int i = 0; i < n; i++)
			if((numa[i % a] == 0 && numb[i % b] == 2) || (numa[i % a] == 2 && numb[i % b] == 5) || (numa[i % a] == 5 && numb[i % b] == 0)) A++;
			else if((numa[i % a] == 2 && numb[i % b] == 0) || (numa[i % a] == 5 && numb[i % b] == 2) || (numa[i % a] == 0 && numb[i % b] == 5)) B++;
		if(A > B) cout << "A" << endl;
		else if(A < B) cout << "B" << endl;
		else if(A == B) cout << "draw" << endl;
	}
	return 0;
}

没有C语言基础的同学们,可以先学习一下C语言语法,我会整理好,后面发出来
我已经写好了,可以去C语言程序设计专栏第一周的内容

本周其他练习:

C语言程序设计专栏

C/C++编程学习 – 第5周 ① Hello World

C/C++编程学习 – 第5周 ② 向左看齐

C/C++编程学习 – 第5周 ③ 圆锥体的体积

C/C++编程学习 – 第5周 ④ 石头剪刀布

C/C++编程学习 – 第5周 ⑤ 人见人爱A+B

C/C++编程学习 – 第5周 ⑥ 四舍五入

C/C++编程学习 – 第5周 ⑦ 等差数列求和(1)

C/C++编程学习 – 第5周 ⑧ 判断直角三角形

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163853.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php读取pdf文件_php怎么转换成pdf

    php读取pdf文件_php怎么转换成pdffunctioncreatePdfFile($frontData){/*新建一个pdf文件:Orientation:orientation属性用来设置文档打印格式是“Portrait”还是“Landscape”。Landscape为横式打印,Portrait为纵向打印Unit:设置页面的单位。pt:点为单位,mm:毫米为单位…

    2025年10月6日
    4
  • 排名前十的时序数据库[通俗易懂]

    排名前十的时序数据库[通俗易懂]时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。时序数据的兴起还是榜上了物联网的大风。物联网(InternetofThings,简称IOT)是指通过各种信息传感器实时采集任何需要管理设备的信息,并进行管理。物联网的基础数据具有数据量大、结构单一、时间属性强、查询简单等特点,传统的关系型数据库在面对物联网数据时,显得应对发力,基本上属于功能过剩但性能不足。目前最新的DB-Engine上时序数据库排名如下

    2022年10月4日
    2
  • 一文读懂Spring 循环依赖,写得太好了!(建议收藏)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 转自:Vt 链接:juejin.im/post/5e927e27f265da47c8012ed9 前言 Spring…

    2021年6月23日
    89
  • Linux文件—文件锁

    Linux文件—文件锁通过之前的open()/close()/read()/write()/lseek()函数已经可以实现文件的打开、关闭、读写等基本操作,但是这些基本操作是不够的。对于文件的操作而言,“锁定”操作是对文件(尤其是对共享文件)的一种高级的文件操作。当某进程在更新文件内数据时,期望某种机制能防止多个进程同时更新文件从而导致数据丢失,或者防止文件内容在未更新完毕时被读取并引发后续问题,这种机制就是“文件锁”。

    2022年6月28日
    51
  • thinkphp—display与fetch区别

    thinkphp—display与fetch区别

    2021年10月28日
    49
  • 软件架构介绍

    软件架构介绍软件架构介绍

    2022年4月22日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号