代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int cnt=0;
for(int i=100;i<=999;i++)
{
int tmp=i,sum=0;
while(tmp)
{
int x=tmp%10;
tmp/=10;
sum+=x*x*x;
}
if(sum==i)
{
cnt++;
cout<<i<<endl;
}
}
cout<<"水仙花数有"<<cnt<<"个";
return 0;
}
输出
两种排序方法我写在一个代码的两个函数里面了
冒泡排序
每次比较相邻元素,把较小的放在前面。这样下去每一轮会把最大的元素放在序列末尾,重复 \(n\) 次操作即可。复杂度 \(O(n^2)\)
选择排序
每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,这样每次操作后待排序序列长度都 -1,重复 \(n\) 次操作即可。复杂度 \(O(n^2)\)
不过实际上,把当前待排序序列首位的元素和之后元素都比较一下,如果比后面的元素大就交换一下,就能实现这种效果,不需要记录最小元素的位置。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF = 0x3f3f3f3f;
inline ll read()
{
ll ret=0;char ch=' ',c=getchar();
while(!(c>='0'&&c<='9')) ch=c,c=getchar();
while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
return ch=='-'?-ret:ret;
}
int a[15],b[15];
void bubble_sort()
{
for(int i=1;i<=10;i++)
for(int j=1;j<=10-i;j++)
if(a[j+1]<a[j]) swap(a[j+1],a[j]);
for(int i=1;i<=10;i++) printf("%d ",a[i]);
puts("");
}
void select_sort()
{
for(int i=1;i<=10;i++)
for(int j=i+1;j<=10;j++)
if(b[i]>b[j]) swap(b[i],b[j]);
for(int i=1;i<=10;i++) printf("%d ",b[i]);
puts("");
}
int main()
{
for(int i=1;i<=10;i++) a[i]=read(),b[i]=a[i];
bubble_sort();
select_sort();
return 0;
}