1294: [蓝桥杯2016初赛]平方怪圈

**1294: [蓝桥杯2016初赛]平方怪圈

时间限制: 1 Sec 内存限制: 256 MB

提交: 461 解决: 331
[状态] [提交] [命题人:外部导入]

题目描述

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。

输出

输出答案即可
来源/分类
**

个人认为这个题对于想的比较多的人容易出错,而对想的简单的人来说会较难做出来,算是一道有水平的水题

重点说想的比较多的人,如果代入n等于99或者999,输出结果对他的代码可能是162与243,然后认为不对,最大的数字是看他的位数最多有多少位,而这个没给范围

实际上这个说的是能闭环的最大值,并不是整个过程的最大值

整个过程可以用数学方法表示出来。
手算可知,最大能闭环的只能两位数特别是90以内,因为在大于90时,是收敛减少的,然后在小于90时,在形成闭环前是在增大的,于是代入89,得到的145就是闭环的最大值

#include<iostream>

using namespace std;

int main(){
    
    
	cout << 145;
}

另一种方法就是模拟方法,笨方法直接模拟求最大值

#include<iostream>  
using namespace std;
int main()  
{
    
      
    int n, m, ans=0;  
    cin>>n;  
    for(int i=0; i<100 ; i++){
    
      
        while(n != 0){
    
      
            m = n% 10;  
            ans += m*m;  
            n /= 10;  
        }  
        cout << ans << endl;       
        n = ans;
        ans = 0;
    }
    return 0;  
 } 

可以观察也得知最大值为145

Guess you like

Origin blog.csdn.net/weixin_52559308/article/details/115465699