mmxingye

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

05| 数组存储运算结果:去除重复的数字

题目描述

给你N个数(n≤100),每个数都在(0~1000)之间,其中由很多重复的数字,请将重复的数字只保留一个,并将剩下的数由小到大排序并输出。

输入

输入有2行,
第1行为1个正整数,表示数的个数:N
第2行有N个用空格隔开的整数。

输出

第1行为1个正整数M,表示不相同数的个数。
接下来的M行,每行一个整数,表示从小到大排好序的不相同的数。

样例

输入

10
20 40 32 67 40 20 89 300 400 15

输出

8
15
20
32
40
67
89
300
400

思路--: 暴力循环 ,查看是否出现过

#include <iostream>
using namespace std;
int main(){
/*
思路:去除重复的元素,对剩余的元素进行排序
去除重复方法-一:读入每个元素都判断一下数组中是否存在该元素
如果存在就不存入数组,如果不存在再存储
*/
int i,n,a[110],x,j,t;
bool f;//用来标记读入的元素是否出现过
int k = 0;//表示目前数组中实际不重复的元素个数
cin>>n;
//i代表将要读入n个数,相当于是-一个计数器
for(i = 0;i < n;i++){
cin>>x;
//判断x在a数组中是否存在(a数组有k个元素)
f = false;//假设a数组中没有元素x
//循环a数组的k个元素
for(j = 0;j < k;j++){
if(a[j] == x){
f = true;
break;//停止当前循环
}
}
//如果数组a中没有元素x,则将x存入数组
if(f == false){
a[k] = x;
k++;
}
}
//排序
for(i = 1;i < k;i++){
for(j=0;j<=k-i-1;j++){
if(a[j] > a[j + 1]){
t = a[j];
a[j] = a[j + 1];
a[j +1] =t;
}
}
}
//输出
cout<<k<<endl;
for(i=0;i<k;i++){
cout<<a[i]<<endl;
}
getchar();
getchar();
}

思路二:以空间换时间

#include <iostream>
using namespace std;
int main(){
//用来统计那些数出现了
int a[1001]={0};
int n,x,i,c=0;
cin>>n;
for(i=0;i<n;i++){
cin>>x;//读入n个数
if(a[x]==0){
c++;
}
a[x]=1;//标记出现过
}
cout<<c<<endl;
//输出不重复的数
//也就是数组中非0元素的下标
for(i=0;i<1001;i++){
//输出非0下标
if(a[i]==1){
cout<<i<<endl;
}
}
getchar();
getchar();
}

posted on   独立树  阅读(435)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示