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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)