经典水仙花树
常规暴力解法:
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n;
while(cin>>m>>n){
vector<int> res;
for(int i=1;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
int sum = i*i*i+j*j*j+k*k*k;
if(sum>=m && sum<=n && sum==i*100+j*10+k){
res.push_back(sum);
}
}
}
}
if(res.size()==0){
cout<<"no"<<'\n';
}else{
for(int num:res){
cout<<num<<' ';
}
cout<<'\n';
}
}
}
题目要求的数据范围就100到999,其实可以知道水仙花数一共就四个(153,370,371,407) ,所以可以偷鸡,但是对于vector容器的掌握有一定的要求(特别是删除,以及迭代器的理解)
#include<bits/stdc++.h>
using namespace std;
int main(){
int m,n;
while(cin>>m>>n){
vector<int> res={153,370,371,407};//就这几个
for(auto it=res.begin();it!=res.end();){//因为要删除,所以用迭代器而不用[]
while(*it<m&& it!=res.end()){//因为erase会指向下一个迭代器,所以不能用if 否则有可能会跳过一个数
it = res.erase(it);
}
while(*it>n && it!=res.end()){//注意要判断一下是不是已经到末尾了it!=res.end(),否则会越界
it = res.erase(it);
}
if(it!=res.end()){//如果删到最后一个是末尾就不能再++了,否则就会变成末尾的后一个,然后再次进入循环
it++;
}
}
if(res.empty()){
cout<<"no"<<'\n';
}else{
for(int num:res){
cout<<num<<' ';
}
cout<<'\n';
}
}
}