2 条题解

  • 3
    @ 2023-7-24 11:43:22
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    using namespace std;
     
    bool arr[10];
    bool exist[10];    //用于记录1,2,3...这些数字在整数num中的存在情况
    unsigned int num,cnt;
    int cycle[10];
     
    int main()
    {
        int k,len;
        int pos;
        scanf("%d",&num);
        while (true)
        {
            Begin:
            memset(arr,0,sizeof(arr));
            memset(exist,0,sizeof(exist));
            num++;         //从输入的整数下一个数字开始判断是否为循环数
            cnt=0;
            k=1;
            len=0;         //len,记录num的位数
            while (k<=num)
            {
                k=k*10;
                len++;
            }
            len--;
            k=num;
            for(pos=len;pos>=0;pos--)
            {
                if (exist[k%10]||!(k%10))  //num中存在重复的数字或者0,必定不是循环数,继续判断下一个数,goto Begin
                    goto Begin;
                cycle[pos]=k%10;           //cycle[]中记录着,num中的pos位置,要往下数k%10个数字
                exist[k%10]=true;          //标记数字k%10已经在num中存在
                k=k/10;               //对于整数num是从后往前一次剥离每一位数字,在得到当前位数字后,前一位数字应为(k/10)%10
            }
            pos=0;
            //循环数,往后数数字循环游戏过程,最开始从num的第一个数字往后数数,pos=0
            while (!arr[pos])     //根据规则要求经历每个位置有且仅有一次最终回到起始位置才是循环数,判断当前位pos是否已经经历过?
            {
                arr[pos]=true;      //标识整数num当前位置已经被数过(经历过)
                pos=(pos+cycle[pos])%(len+1);  //计算下一轮数数字游戏,起始位置
                cnt++;              //游戏每数过一个位置上的数字,游戏轮数,计数cnt++
            }
            if (cnt==len+1&&pos==0)  //从起始位置开始,判断游戏的轮数是否和整数num的位数相同且最终位置回到了起始位置0
            {        //由于前面计算得到整数num的位数len后,由于数组arr[]从0开始,有一个len--操作,因此这里比较为cnt==len+1
                printf("%d",num);
                return 0;
            }
        }
        return 0;
    }
    

    已AC,放心食用!记得点赞哦~

    • -8
      @ 2023-2-11 21:29:34

      写题解请注意

      鼓励大家写题解,但注意题解格式。

      题解一定要有思路解析或代码注释,能否让别人理解你的思路

      也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

      给代码两端加上这个会舒服一些

      ```cpp

      你的代码

      ```

      这个点在键盘的左上角tab上面那个键,注意切换输入法

      #include<iostream>
      using namespace std;
      int main()
      {
          int n;
          cin>>n;//这是一个注释
          return 0;
      }
      

      请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

      抄袭题解一经发现直接取消成绩。

      题解被删除的可能

      1. 代码不符合格式规范
      2. 没有思路讲解或者没有注释,
      3. 无意义的题解

      大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

      • 1

      信息

      ID
      1628
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      递交数
      64
      已通过
      34
      上传者