P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

[题目链接](https://www.luogu.com.cn/problem/P1328

题意

两人出拳是有规律的,有周期性,有周期长度,共进行N次猜拳,分别计算出两人赢的次数。

思路

  1. 首先要把表格补充完整,用表格里的数作为二维数组,作为寻找赢的次数的二维数组。
  2. 根据题目要求依次定义输入,然后将小A,小B猜拳的规律依次找出来。
  3. 最后定位二维数组中两人赢的点,进行计数,然后输出。

坑点

  1. 坑点没有什么,主要就难点,难点在于怎样定位谁赢与赢的次数。

算法一:二维数组

实现步骤
  1. 首先进行打表,输入二维数组
  2. 遍历小A,小B猜拳的规律
  3. 分别统计赢的次数
代码
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;//头文件 
int s[5][5]={0,0,1,1,0,
	         1,0,0,1,0,
			 0,1,0,0,1,
			 0,0,1,0,1,
			 1,1,0,0,0};//首先打表,输入二维数组 
int main()
{
	int N,N1,N2,sum=0,ans=0;//应题目要求,定义N,N1,N2,计数器sum,ans,给计数器定义一个初值=0 
	cin>>N>>N1>>N2;
	int a[N1]={},b[N2]={};//定义一维数组 
	for(int i=0;i<N1;i++)
	{
		cin>>a[i];//遍历小A的猜拳规律 
    }
    for(int i=0;i<N2;i++)
    {
    	cin>>b[i];//遍历小B的猜拳的规律 
	}//一维数组的输入 
	for(int i=0;i<N;i++)
	{//统计得分(小A,小B) 
		sum+=s[a[i%N1]][b[i%N2]];
		ans+=s[b[i%N2]][a[i%N1]];
	}
	cout<<sum<<" "<<ans;//最后输出统计数量, 
	return 0;//终止程序 
}

总结

有点复杂,一维数组与二维数组的嵌套,需要定位二维数组,找到谁输谁赢,然后计数,最后输出。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值