程序没错,想不通原理

#include<iostream>
using namespace std;
int  main() {
    int num = 100;
    do { 
        int a = 0;
        int b = 0;
        int c = 0;
        a = num % 10;
        b = num / 10 % 10;
        c = num / 100;
        if (a*a*a + b*b*b + c*c*c == num) { cout << num << endl; }num++;
        cout << num << endl; num++;  //为什么这样就输出奇数了??去掉这一行就正常输出水仙花数
    } while (num < 1000);


    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
int  main() {
    int num = 100;                            //创建整形变量num并初始化num=100
    do {                                //进入循环
        int a = 0;                            //创建整形变量a并初始化a=0
        int b = 0;                            //创建整形变量b并初始化b=0
        int c = 0;                            //创建整形变量c并初始化c=0
        a = num % 10;                         //a等于num除以10后得到的余数
        b = num / 10 % 10;                    //b等于num除以10后再除以10后得到的余数(因为是整形运算,第一次除以10后取整数再除以10)
        c = num / 100;                        //c等于num除以100(因为是整形运算,除以100后取整数)
        if (a*a*a + b*b*b + c*c*c == num)     //判断是否是水仙花数
        { 
            cout << num << endl;                  //输出num的值
        }
        num++;                                //num的值+1
        cout << num << endl;                  //输出num的值
        num++;                                //num的值+1
    } while (num < 1000);               //判断是否继续循环
    system("pause");                          //暂停
    return 0;                                 //结束
}

输出水仙花数很明显有一个if的判断,看数是不是水仙花数,是的话输出值。

输出奇数是因为除了第一次,每次输出前都有两次num++;,而num刚开始是100,经过第一次变成奇数,所以每次输出是奇数。

在100到1000里的水仙花数有4个,程序这样应该输出只有一水仙花数吧。

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html