第七届蓝桥杯省赛JAVA语言 C组题解_题3 平方怪圈

JAVA语言 C组题解_题3 平方怪圈

题目

标题:平方怪圈

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。

如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。

请写出这个循环圈中最大的那个数字。

请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

解题思路

1、寻找循环终止条件,如果不是落入1,就是落入同一个循环圈。前半句很好理解,后面半句则可以这样理解,如果最大的那个数字出现了两次则表示落入了循环圈。(这中判断方式是简化的判断,并不严谨,符合大多数情况。可有些数字如99,79.并不能计算出正确的结果,可以加上输出语句判断最大数字是否存在循环圈中)
2、有了终止条件代码就很容易下手了,每次把一个正整数n的每一位都平方后再求和,得到一个新的正整数。再将新正整数赋给n,重新进入循环,直到落入循环圈,或落入1.代码如下:附带详细注释
答案:145

//java代码
     public static int squareCircle(int n) {
        int max = 0;//保存最大值
        while (n != 1) {//循环条件
            int t = n;
            int sum=0;//保存新的正整数。
            //计算得出新的正整数
            while (t != 0) {
                int x = t % 10;
                sum=sum+x*x;
                t = t / 10;
            }
            n=sum;//将新正整数的值赋予n,更新n的值
            if(max==sum){
                //如果max的值出现了两次则表示落入同一个循环圈。跳出循环
                break;
            }
            //使max保持最大
            max=Math.max(sum,max);

        }
        System.out.print(max);
        //返回结果
        return max;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值