传送门:http://codeforces.com/gym/100015/attachments
已知一个石头剪刀布的串S
初始是P
每次构造串S‘打败S,以及S’‘打败S’
以此类推
求第n个元素是什么
只要找到是哪个转移来的就行
让x减去不大于x的最大的3的幂
代码如下:
#include<cstdio>
using namespace std;
long long n;
int change(int x)
{
return (x+1)%3;
}
long long next(long long x)
{
long long sum=1;
while (sum<x)
{
sum*=3;
}
sum/=3;
return x-sum;
}
int get(long long n)
{
if (n<=2)
{
return n;
}
else
{
return change(get(next(n)));
}
}
int main()
{
while (1)
{
scanf("%I64d",&n);
if (!n)
{
break;
}
switch (get(n))
{
case 0:
{
printf("R\n");
break;
}
case 1:
{
printf("P\n");
break;
}
case 2:
{
printf("S\n");
break;
}
}
}
return 0;
}

本文提供了一个使用C++语言解决石头剪刀布序列问题的算法,通过递归调用和数学操作,实现了从任意起始状态生成指定序列的第n个元素。代码详细阐述了如何通过减去不超过当前数的最大3的幂来确定序列的下一个元素。
1086

被折叠的 条评论
为什么被折叠?



