解题思路:


题目中的条件水仙花数是三位数,所以for()循环的时候i从100到999就好;


定义三个数a,b,c,分别放这个三位数的百位,十位,个位;


再用一个if语句判断a^3+b^3+c^3是否等于i,如果等于,输入i就好;

注意事项:


三位数各位的求法:

        1、个位,直接对10取余;

        2、十位,先对10取整得到十位和百的数,此时是一个两位数,再对10取余就得到十位;

        3、百位,直接对100取整即可。


参考代码:


#include<stdio.h>
int main()
{
	int a,b,c,i;
	for(i=100; i<1000; i++){
		a = i / 100;
		b = i / 10 % 10;
		c = i % 10;
		if(a*a*a + b*b*b + c*c*c == i)
			printf("%d ",i);
	}
	printf("\n");
	return 0;
}


点赞(29)
 

0.0分

55 人评分

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

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

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

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

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

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

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

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

评论列表 共有 64 条评论

LBD西瓜泥 3年前 回复TA
简单粗暴
#include<stdio.h>
int  main(){
printf("153 370 371 407");
     return  0;
}
ant 3年前 回复TA
#include<stdio.h>
int main()
{
    int i,j,n;
    for(i=1;i<=9;i++)
        for(j=0;j<=9;j++)
            for(n=0;n<=9;n++)
                if(100*i+10*j+n==i*i*i+j*j*j+n*n*n)
                    printf("%d\n",100*i+10*j+n);
    return 0;
}
sudo 3年前 回复TA
@01陈彬彬 你的条件用逻辑运算符写,循环体中自加,患有那个三次方的等于你这样写有啥用
sudo 3年前 回复TA
@bobo 乱七八糟写啥呢,for循环里的你确定是这样写三次方,值都变了还三次方;第二个if应给调用最开始的值,不会出现三次方的
sudo 3年前 回复TA
@01陈彬彬 你的条件用逻辑运算符写,循环体中自加,患有那个三次方的等于你这样写有啥用
sudo 3年前 回复TA
@01陈彬彬 你的条件用逻辑运算符写,循环体中自加,患有那个三次方的等于你这样写有啥用
bobo 3年前 回复TA
#include<stdio.h>
int main()
{
    // 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。
    // 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。
    int a[3]={0};
    int n,i,j,b;
    for( n=100;n<1000;n++){
        for(i=0;i<3;i++){
			b=n;
            a[i]=b%10;
            printf("%d \n",a[i]);
            b=b/10;
            printf("%d ",b);
            
            
        }
        printf("%d ",a[i]);
        for( j=0;j<2;j++){
            a[j]*=a[j];
        }
        if(n==a[0]+a[1]+a[2])
        	printf("%d\n",n);
    }
    return 0;
}
为什么不行?
七月 3年前 回复TA
@smy19 因为题目说了,水仙花数是一个三位数
七月 3年前 回复TA
@oo 你这个好像没必要加math.h的头文件吧
七月 3年前 回复TA
@skysky 你写的这是赋值,等于是两个等号