【算法记录:循环相克】

循环相克

很早之前在acwing就做过类似这样的题目,依稀记得方法,但是没有归纳,今天又在pat的进阶题里面遇到差不多的题型,所以就归纳一下。

题目描述

基本上会形成一个闭环,类似石头剪刀布这种,石头克剪刀,剪刀克布,布克石头。一般题目给出两种类型,让你输出他们其中关系。比如pat中进阶题,相生相克中,告知水克火以及一系列。要求告知关系,比如 “A ke B”“A sheng B”。

思路

我认为比较简单的做法就是取模
比如
A 克 B,B克C,C克A

每次输入"A B"要求输出AB之间关系

令A = 0,B = 1,C= 2

A+1%3 = 1
B+1%3 = 2
C+1%3 = 0

此时有几种情况

  • 两个输入数相同
    这种就没什么可说的判断一下就行了
  • 输入数不同
    我们的做法是让后面的数取模后与前面的数进行比较。
    我们发现
    B = A+1%3 ; C=B+1%3 ; A=C+1%3
    也就是说当前一个数等于后一个取模时,那么第二个数一定是克第一个数的。

代码

if(x==y){
            cout<<"平手"<<endl;
        }else if(x==(y+1)%3){
            cout<<"第一个数大于第二个数"<<endl;
        }else{
            cout<<"第一个数小于第二个数"<<endl;
        }

总结

遇到这种问题

  1. 将给出元素换算成数字,
  2. 找出规律取模后等于元素代表数字,就可以解决问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值