注册 登录
编程论坛 C语言论坛

求水仙花数

闲客一位 发布于 2022-02-19 10:51, 1253 次点击
程序代码:
   
#include<stdio.h>
int i,j,k,n;
while(i<=9){
        int z;
        z=i*i*i+j*j*j+k*k*k;
        n=i*100+j*10+k;
        k++;
        if(k==10){
            k=0;j++;}
        if(j==10){
            j=0;i++;}
        if(z==n){printf("%d\n",n);}

    }

输出不了,好难过啊。我本意是想用所有的三位数(即n)和z比较。太难过了,这效率也太低了,这半天我居然还在这里打转,是我没有编程思维吗?我该怎么培养啊
3 回复
#2
纯蓝之刃2022-02-19 15:43
#3
闲客一位2022-02-19 20:12
回复 楼主 闲客一位
我终于搞明白了,要哭了。
程序代码:
#include <stdio.h>
#include<math.h>
main()//水仙花的输出要对所有三位数进行判断,所以关键在于如何输出所有的三位数。
//for和while很像,只不过for把while判断条件放在式2处,并将while循环一次产生的影响放到式3处。式1是前提预设。
{
    int i=1,j=0,k=0,n;
    //法一:
    for(n=100;n<1000;n++)
    {
        i=n/100;
        j=(n-i*100)/10;
        k=n%10;
        if(n==i*i*i+j*j*j+k*k*k)
        printf("%6d",n);
    }
    printf("\n");
    //法二:
    for(i=1;i<=9;i++)
    {
        for(j=0;j<=9;j++)
        {
            for(k=0;k<=9;k++)
        {
            if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
            printf("%6d",i*100+j*10+k);
        }
        }
    }
    printf("\n");
    //法三:            
     i=1;j=0;k=0;//因为前面法一法二运行后他们都不是初始值,所以要重新赋值。
    while(i<=9){
        int z;
        z=i*i*i+j*j*j+k*k*k;
        n=i*100+j*10+k;
        k++;
        if(k==10){
            k=0;j++;
        }
        if(j==10){
            j=0;i++;}
        if(z==n){printf("%d\n",n);}

    }
}
#4
闲客一位2022-02-19 20:17
回复 3楼 闲客一位
怪不得法三一直输出不了,我以后到哪都会记得初始化。初始化,英文输入,==
1