本来我的题目是从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;

就可以了。

点赞(1)
 

0.0分

10 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 7 条评论

Pluie 2年前 回复TA
@坚果吞噬者 我这个简洁得多
Pluie 2年前 回复TA
@坚果吞噬者 #include<stdio.h> int main() { 	int a;//需要寻找的数字  	int b;//存放a拆解出来的数字 	int c=0;//存放拆解出来数字的五次方和  	int t;//代替a进行分解,保持a的不变  	for(a=0;a<999999;a++) 	{ 		t=a; 		 		while(t>0) 		{ 			 			b=t%10; 			c+=b*b*b*b*b; 			t/=10; 			 		}	 		if(c==a) 		{ 			printf("%d是这种数
",a); 			 		} 		c=0;    		 	} 	 	 	return 0;  }
Pluie 2年前 回复TA
@坚果吞噬者 你这也太复杂了
坚果吞噬者 2年前 回复TA
我想问一下为什么我这数组的赋值有问题
#include<stdio.h>
#define max(x) x*x*x*x*x
int main()
{
	int i,j;
	int shu[10];
	for(i = 0 ; i < 1000000 ; i++){
		
		for(j = 0 ; j < 10 ; j++){//让存数的数组每位都为0 
			shu[j]=0;
		}
		int b=i;//保存一下i的数值 
		j=0;
		while(b != 0){
			if(b < 10){//当数小于10时,直接存储之后break结束 
				shu[j]=b;
				break;
			}
			shu[j++]=b%10;
			b=b%10;
			
			
		} 
		
		int sum=0;
		for(j = 0 ; j < 10 ; j++){//让每个数都乘5次方 
			sum+=max(shu[j]);
		}
		
		if(i == sum){//如果总和与i相等,输出结果 
			printf("%d\n", sum);
		}
		
	}
	return 0;
}
盘旋 2年前 回复TA
@aoteman 这应该是出题人的锅,在题目描述的条件里0和1明明是满足题目要求的。
aoteman 3年前 回复TA
不明白为什么不包括 0和1
LoneRanger 4年前 回复TA
???