蓝桥杯:算法提升-平方怪圈

平方怪圈

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

分析:
假设一个数字进行测试,如123
int x = 123;

1*1=1
2*2=4
3*3=9
    14

1*1=1
4*4=16
    17

1*1=1
7*7=49
    50

5*5=25
0*0=0
    25
    ...
    ...
    ...
    通过规律把每一次的数字进行比较,落入1停止

public class Main {
	public static void main(String[] args) {
		/*根据题意得无论所有数都会进入一个循环圈或者1。
		 * 所以我测试数据取多少无所谓
		 * 既然最终都会进入圈内,求最大值我用判断语句1肯定不挂边,
		 * 那么圈中的最大值也就是测试语句变化的所有值中最大的
		 * 
		 * 当然 靠打印语句也可以看出来圈中最大值
		 * 
		 * */
		int max = 0;
		for (int i = 20; i < 50; i++) {//测试20-50的数据
			int ii = i;//赋值给ii ii用来变化数值
			int is = 0;//声明一个圈中循环的次数
			while(ii!=1 && is<100){//ii变为1 或者循环100次停止循环
				is++;//循环次数累加
				if(ii<100){//二位数操作
					int ge = ii%10;
					int shi = ii/10;
					ge = ge*ge;
					shi = shi*shi;
					ii=shi+ge;
					if(max<ii){
						max=ii;
					}
					//System.out.print(ii+" ");//打印变化后的
				}else{//三位数操作:
					int ge = ii%10;
					int shi = ii/10%10;
					int bai = ii/100;
					ge = ge*ge;
					shi = shi*shi;
					bai = bai*bai;
					ii=shi+ge+bai;
					if(max<ii){
						max=ii;
					}
					//System.out.print(ii+" ");
				}
				
			}
			//System.out.println();
		}
		System.out.println("最大值为:"+max);
	}
}

打印输出为:
最大值为:145

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值