zoukankan      html  css  js  c++  java
  • 周四新生训练 Bad random numbers

    http://ecustoj.sinaapp.com/problemshow.php?pro_id=432

    #include<stdio.h>
    #include<string.h>
    int b[1000];
    int main()
    {
        int a,mid,square,i=0,j,flag;
    
        while(scanf("%d",&a)!=EOF)
        {
            flag=0;
            memset(b,9999,sizeof(b));
            i=0;
            while(i<10000)
            {
                b[i]=a;
                mid=a/10%100;
                if(a==mid)
                break;
                square=mid*mid;
                for(j=0;j<=1000;j++)
                {
                if(square==b[j])
                flag=1;
                }
                if(flag==1)
                break;
                a=square;
                i++;
    
            }
            if(mid==0)
            i++;
    
            printf("%d\n",i+1);
        }
    
    }

    出现的特殊数据就是循环,题目给出了一个一次的特殊循环(循环节=1),如果单单考虑这一种的话,会发现结果是WA。

    因而应该还存在经过几次square & 取middle之后又回到几次之前的num的情况,即循环节>1。

    时间问题,采用比较蠢的办法,开一个数组,记录下之前出现过的num,一旦square之后,立刻与之前出现过的每一个num相比较,如果不存在相同的数字,那么就继续进行square & 取middle,如果存在相同的数字,那么就跳出循环。

    最后应当针对不同的case对i进行处理,再把i输出。

  • 相关阅读:
    记一次主从同步出现错误
    Mycat的学习
    MHA高可用集群
    MySQL进行 行累计
    设定从某个时间执行脚本,直到现在
    跟踪数据
    爬虫笔记
    爬虫练习
    css3-文本阴影
    vue生命周期
  • 原文地址:https://www.cnblogs.com/whatthefy/p/2987808.html
Copyright © 2011-2022 走看看