本来我的题目是从1开始的数据,这样比现在这个答案要多出一个1数据作为答案(1的5次方=1)
但是发现这样错了
范围的推理过程如下:
上边界:
以单位数最大值9为边界,9^5=59049 是五位数字,
那么5位数字增加一位为添加任何数据的极限,即 5*(9^5)=295245(即每一位都是9,当然数据是达不到的)而这样一个极限的数据是6位数,我为了编写方便,可以直接写一个最大的六位数999999(当然你也可以按照推理数据写295249),超过6位数已经不会产生数据了,这就是上边界。
下边界:
本来我是从个位数开始计算的,这样计算可以有两个数据,0和1,0的五次方为0,1的五次方为1,但可惜本题的正确答案并不包含这两个数据,那么既然错了之后,可以发现数据其实从2位数开始也未尝不可,找到几个详细的数据之后又可以发现,大概在4位数的时候,出现了一个数据的平衡点,所以可以拿4作为边界,这需要有一定的数据敏感性,建议还是老实使用10作为下边界吧。
代码:
#include<stdio.h> #include<math.h> int main() { for(int i=1000; i<=999999; i++) { int t1=i%10,t2=i/10%10,t3=i/100%10,t4=i/1000%10,t5=i/10000%10,t6=i/100000;//分别是个,十,白,千,万,十万位 if(pow(t1,5)+pow(t2,5)+pow(t3,5)+pow(t4,5)+pow(t5,5)+pow(t6,5)==i) printf("%d\n",i); }//判断一下五次方数从4位开始,6位结束,或多或少(1除外)均不可能产生五次方数字 return 0; }
最终答案如此
4150
4151
54748
92727
93084
194979
可以直接用C++的大R输出法快速解决:(直接输出)
cout<<R"(4150 4151 54748 92727 93084 194979)"<<endl;
就可以了。
0.0分
10 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复