知识基础:


for(表达式1;表达式2;表达式3){若干语句}//for循环语句及其格式


思路:水仙花数为三位数,所以循环从100开始,到999结束,i为int型变量,所以i/100的值也是一个int型变量(整数)(注:C语言的取整不是四舍五入,是直接舍去小数),i/100就是百位上的数,i和100求余就是剩下的两位数,i%100之后再除以10同理会得到十位上的数,原数字再和10求余就是个位上的数


答案

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

注:程序结束return 0;不可省。

点赞(4)
 

0.0分

69 人评分

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

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

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

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

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

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

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

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

评论列表 共有 44 条评论

Leno 5月前 回复TA
@天天吃饭 第一个for要去掉,if判断式改成(x * x * x + y * y * y + z * z * z == x*100+y*10+z)
xiaobai 5月前 回复TA
#include <stdio.h>

int main()
{
    int i = 0;
    int g = 0;
    int s = 0;
    int b = 0;
    
    for(i=100;i<1000;i++)
    {
        g = i % 10;
        s = (i / 10) % 10 ;
        b = (i / 100) % 10 ;
        if(g * g * g + s * s * s + b * b * b == i)
        {
            printf("%d\n",i);
        }
    }
    return 0 ;
}。这样把取余这一步操作单独拿出来可能会更好点。
热心的小马哥 8月前 回复TA
int x, i, sum=0,y;
for (x = 100; x <= 999; x++) {
	y = x;
	sum = 0;
	for (i = 0; i < 3; i++) {
		int m = y % 10;
		y = y / 10;
		sum = sum + m * m * m;
		if (sum == x&&i==2) {
			printf("%d\n",x );
		}
	}
}
return 0;我觉得还凑合
且听我说 10月前 回复TA
@生生 两个地方都有问题。(1)else {x++}改成x++;(2)while(x>=1000)改成while(x<1000)
CoCo 10月前 回复TA
@天天吃饭 你好像没有输出
天天吃饭 1年前 回复TA
@天天吃饭 评分为0
天天吃饭 1年前 回复TA
#include <bits/stdc++.h>
using namespace std;

int main() {
    int x,y, z, num;
    for (int num = 100; num <= 999; num++) { // 从100到999遍历所有数
        for (int x = 1; x <= 9; x++) { // x从1到9遍历
            for (int y = 0; y <= 9; y++) { // y从0到9遍历
                for (int z = 0; z <= 9; z++) { // z从0到9遍历
                num=x*100+y*10+z;
                    if (num== x * x * x + y * y * y + z * z * z) { // 判断num是否等于x, y, z的立方的和
                        cout << num <<endl; 
                    }
                }
            }
        }
    }
    return 0;
}为什么不对啊大佬们
生生 1年前 回复TA
@生生 @uq_82693862469 我这个是while条件错了  应该还是小于1000
零点 1年前 回复TA
@生生 说实话我这个do..while 语句不怎么会用,但我还是大胆认为最后的应该是x<=1000,而且那个else语句感觉有问题,如果到了153的话,就会跳过else,导致无法到154,陷入死循环,应该是要删掉的
生生 1年前 回复TA
#include<stdio.h>

int main()
{
	int a, b, c;
	int x=100;
	do{
		a = x / 100;
		b = x / 10 % 10;
		c = x % 10;
		if((a*a*a+b*b*b+c*c*c) == x){
			printf("%d\n",x);
		}else{
			x++;
		}
	}while(x>=1000);
	return 0;
}这样哪里错了求大佬指点