Lab4:数据处理方法及创新应用(创新)

发布时间 2023-11-10 23:55:41作者: conprour

image

代码

#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;
}

输出

image

image

两种排序方法我写在一个代码的两个函数里面了

冒泡排序

每次比较相邻元素,把较小的放在前面。这样下去每一轮会把最大的元素放在序列末尾,重复 \(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;
}

输出

image