题解 | #输出水仙花数#
输出水仙花数
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中的起始位置,逆序复制的元素将从此位置开始存放。
*/
//-------------------------------------------------------------
阿里云工作强度 702人发布
