题解 | #输出水仙花数#

输出水仙花数

https://www.nowcoder.com/practice/dabaf13009ef4d0cbf22302fd6a530a6

#include <iostream>
#include<vector>
using namespace std;

int main() {

    // write your code here......
//--one way------------------------------------------------    
    for(int i=1;i<10;i++) //百位从1开始
    {
        for(int j=0;j<10;j++) //十位从0开始
        {
            for(int k=0;k<10;k++) //个位从0开始
                if(i*i*i+j*j*j+k*k*k==(i*100+j*10+k)) //开始判断
                {
                    cout<<i*100+j*10+k<<endl;
                }
        }
    }
}

//--other way---------------------------------------------

 //注意!!!!!!!!第一大步不在main里面
//这个也是个很好的办法,用布偶函数,但是第一次见到这种就是在后面(int num) 然后先做true false的判断再用i将数放进去
    bool isFlower(int num)  
    {
        int temp=num;  //千万别漏这一步!!!!!!!否则会出现0
        int a=num%10;
        num/=10;       //一定要把已提出的位去掉
        int b=num%10;
        num/=10;
        int c=num%10;
        if(temp==a*a*a+b*b*b+c*c*c) //作bool判断
        {
            return true;           //别忘“;”
        }
        else
        {
            return false;
        } 
    }

    int main()   //这下面才是main函数,上面不是!!!!!
    {
        for(int i=100;i<1000;i++)
        {
            if(isFlower(i))
            {
                cout<<i<<endl;
            }
        }
    }





















//好像疑惑有问题的点就在于抓不准怎么在判断sum=temp的同时完成数的递增,大家也可以帮我看看哪出问题拉

    /* int flower;//which belong to 100-999
    vector<int>digits; //creat a vector to store the digits of flower
    for (int i = 0; i < 1000 && i > 99; i++) {
        while (i > 0) { //put it into a loop to take digit out
            int digit = i %
                        10; //take 个位上的数(!!注意!最后vector里的顺序是反的
            digits.push_back(digit);  //vector.push_back 放入
            i /= 10; //去掉最后一位,继续循环取数
        }
        int sum = 0;
        bool isFlower = true;
        for (int digit : digits) 
        {
            int number = digit * digit * digit;
            sum += number;

            if (sum == flower)
            {
                isFlower = true;
            } else 
            {
                isFlower = false;
            }

            if (isFlower == true) 
            {
                cout << flower << endl;
            }
        }
    }

*/
//---------------------------------------------------------------
    //因为我们现在是只是单独运算每个数的立方之和,所以无需进行顺序调换reverse,如果要进行调换,如下:
    /*
    1.输出vector
    for(int digit:digits)----int digit是一个循环变量,用于存储digits中的每个元素的值。:后面的digits是要遍历的向量或数组。
    {
        cout<<digit;
    }
    cout<<endl;

    2.翻转vector,找到原来顺序的vector
        //且注意,如果用reversedVector:需加上:#include <algorithm>  //write this ofr use "reversedVector"function,不加是无效的,该<alorithm>包含了翻转的算法

    vector<int>reversedVector(digits.size());
        //解释:新建一个翻转vector(reversedVector),先定最初size就是digits的size,以确保翻转vector的最初容量足够囊括正确顺序的vector元素
    reverse_copy(digits.begin(),digits.end(),reversedVector.begin());
        //解释:①reverse_copy()是一个算法函数,用于将指定范围内的元素逆序复制到目标容器中。②digits.begin()和digits.end()表示了要复制的元素范围。③reversedVector.begin()表示了目标容器reversedVector中的起始位置,逆序复制的元素将从此位置开始存放。
    */
//-------------------------------------------------------------

全部评论

相关推荐

威猛的香菇在秋招:感觉假的…测开怎么可能才13k
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务