题解:P17113 [Algo Beat 009 & MROI-R1] Number Game

· · 题解

题意

给定一个数 N,小 S 和小 M 轮流进行操作。

每次把当前数的各位数字相加得到新数。如果某次操作后,这个新数等于操作前的数,则这一轮的操作者输。判断胜负。

思路

可以来模拟一下这个过程,如果这个数比 10 小,则不会发生改变,继续模拟,否则就继续制造新数。最后用一个 s 来统计轮数,若 s 是奇数,则小 S 输,小 M 胜,反之,则小 M 输,小 S 胜。

代码

贴上 AC 代码。

#include<bits/stdc++.h>
using namespace std;
long long T;
long long x;
int main(){
    scanf("%lld",&T);
    while(T--){
        long long n;
        scanf("%lld",&n);
        long long s=1;
        while(n>=10){
            long long m=n;
            n=0;
            while(m){
                n+=m%10;
                m/=10;
            }
            s++;
        }
        if(s%2==1) printf("M\n");
        else printf("S\n");
    }
    return 0;
}

提交 撒花。

本蒟蒻的第四篇题解,求过。