博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(Problem 92)Square digit chains
阅读量:4944 次
发布时间: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

你可能感兴趣的文章
mysql数据备份与恢复
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>
LINUX中搭建DNS服务器,实现正向、反向以及访问不同DNS解析
查看>>
SCCM2012 R2实战系列之十:解决WDS服务无法启动问题(错误1067:进程意外终止)...
查看>>
ubuntu 下安装 mysql
查看>>
关于k-means聚类算法的matlab实现
查看>>
Git分支2
查看>>
一键安装Gitlab后的备份、迁移与恢复
查看>>
因为本人工作繁忙,精力有限,本博客停止更新。有兴趣的博友可以关注我在CSDN上的主博客...
查看>>
SQL server查看触发器是否被禁用
查看>>
[C++基础]在构造函数内部调用构造函数
查看>>
跟随我在oracle学习php(8)
查看>>
Spring 3.1.0 Hibernate 3.0 Eclipse Spring WEB例子
查看>>
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
求两个集合的交集,并集,差集
查看>>
Kotlin的语法糖(一)基础篇
查看>>
OkHttp源码分析
查看>>
让你的app体验更丝滑的11种方法!冲击手机应用榜单Top3指日可待
查看>>