博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(Problem 92)Square digit chains
阅读量:4935 次
发布时间:2019-06-11

本文共 2106 字,大约阅读时间需要 7 分钟。

A number chain is created by continuously adding the square of the digits in a number to form a new number until it has been seen before.

For example,

44 → 32 → 13 → 10 → 1 → 1 85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89

Therefore any chain that arrives at 1 or 89 will become stuck in an endless loop. What is most amazing is that EVERY starting number will eventually arrive at 1 or 89.

How many starting numbers below ten million will arrive at 89?

题目大意:

通过将一个数各位的平方不断相加,直到遇到已经出现过的数字,可以形成一个数字链。

例如:

44 → 32 → 13 → 10 → 1 → 1 85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89

因此任何到达1或89的数字链都会陷入无限循环。令人惊奇的是,以任何数字开始,最终都会到达1或89。

以一千万以下的数字n开始,有多少个n会到达89?

算法一:常规方法,从2~10000000逐个判断,同时统计结果

#include
#define N 10000000int fun(int n){ int t, sum; sum = 0; while(n) { t = n % 10; sum += t * t; n /= 10; } return sum;}void solve(void){ int i, sum, t; sum = 0; for(i = 2; i < N; i++) { t = fun(i); while(1) { if(t == 89) { sum++; break; } else if(t == 1) { break; } else { t = fun(t); } } } printf("%d\n",sum);}int main(void){ solve(); return 0;}

算法二(优化):使用一个bool型数组,保存每次结果,由于最大的中间数为9999999产生的:9^2*7 = 567,所以bool型数组的大小开到600足够

#include 
#include
#define N 10000000bool a[600] = {
false};int fun(int n){ int t, sum; sum = 0; while(n) { t = n % 10; sum += t * t; n /= 10; } return sum;}void solve(void){ int i, sum, t, temp; sum = 0; for(i = 2; i < N; i++) { t = fun(i); temp = t; if(a[temp]) { sum++; } else { while(1) { t = fun(t); if(a[t] || t == 89) { a[temp] = true; sum++; break; } else if(t == 1) { break; } else { } } } } printf("%d\n",sum);}int main(void){ solve(); return 0;}
Answer:
8581146

 

转载于:https://www.cnblogs.com/acutus/p/3509363.html

你可能感兴趣的文章
JavaWeb【二、Tomcat安装】
查看>>
[Testing] Config jest to test Javascript Application -- Part 2
查看>>
【Git】安装配置
查看>>
团队作业一
查看>>
BZOJ2286: [Sdoi2011]消耗战(虚树/树形DP)
查看>>
Linux进程通信 之 信号灯(semphore)(System V && POSIX)
查看>>
codeforces #232 div2 解题报告
查看>>
socket入门
查看>>
人生成功的六匹马(转自喷嚏网的一篇品书)
查看>>
Unity游戏数据用Json保存
查看>>
Linux下关于信号block与unblock的小研究
查看>>
Java 基础【01】Swinig 页面布局
查看>>
Shell教程
查看>>
Android 5.0+删除Sdcard文件
查看>>
English Learning Daily Note of Fourth
查看>>
Node.js 教程
查看>>
windows系统和centos双系统安装引导项修改
查看>>
理解数据类型与数学运算:求和、温度转换
查看>>
kernel panic 分析(camera导致的mem越界)
查看>>
文档流
查看>>