题解 | #输出水仙花数#
输出水仙花数
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中的起始位置,逆序复制的元素将从此位置开始存放。 */ //-------------------------------------------------------------