明明生成了个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。 数据范围: ,输入的数字大小满足
区块链毕设网qklbishe.com为您提供问题的解答
明明生成了个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
#include <iostream>using namespace std; int main() { int N, n; while (cin >> N) { int a[1001] = { 0 }; while (N--) { cin >> n; a[n] = 1; } for (int i = 0; i < 1001; i++) if (a[i]) cout << i << endl; } return 0; }
#include<iostream> #include<set> using namespace std; int main(){ int loop = 0; while (cin >> loop) //看题目,set容器 { int a[1000], tem, i = 0; for (int i = 0; i < loop; i++) cin >> a[i]; set<int> num(a, a + loop); for (set<int>::iterator it = num.begin(); it != num.end(); it++){ cout << *it << endl; } } return 0; }
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[1000],b[1001]={0},i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
b[a[i]]++;
for(i=0;i<1001;i++)
{
if(b[i]!=0)
printf("%dn",i);
}
}
return0;
}
|
//这个问题的表述本身有问题,它的测试数据不止有一组,很多朋友估计是因为这个原因一直没有通过
import java.util.Scanner; import java.util.TreeSet; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ TreeSet<Integer> set=new TreeSet<Integer>(); int n=sc.nextInt(); if(n>0){ for(int i=0;i<n;i++){ set.add(sc.nextInt()); } } for(Integer i:set){ System.out.println(i); } } } }
/* 使用<algorithm>中的sort()进行排序。 排好序输出时进行去重,若要输出的数和前一个输出的数相同则不输出该数。 */ #include <iostream> #include <algorithm> using namespace std; int main() { int n; while(cin >> n){ int inputArray[n]; int tmp; for(int i=0;i<n;i++){ cin >> tmp; inputArray[i] = tmp; } sort(inputArray,inputArray+n); if(n==1) cout<<inputArray[n-1]<<endl; else{ cout<<inputArray[0]<<endl; for(int i=1;i<n;++i){ if(inputArray[i]!=inputArray[i-1]) cout << inputArray[i] << endl; } } } return 0; }
python三行代码解法:
while True: try: a,res=int(input()),set() for i in range(a):res.add(int(input())) for i in sorted(res):print(i) except: break
学号一到一千,随机数还不超过一千,去重,排序,我去,,, 怎么这么熟悉,这不是桶排序么!!! #include<iostream> #include<vector> using namespace std; int main() { int nums; // 表示随机数个数 while (cin >> nums) { vector<int> id(1001, 0); int tmp; for (int i = 1; i <= nums; i++) { cin >> tmp; id[tmp]++; } for (int j = 1; j < id.size(); j++) if (id[j]>0) cout << j << endl; } return 0; }
import java.util.Scanner; import java.util.TreeSet; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNext()){ int n = scan.nextInt(); int[] array = new int[n]; for(int i=0;i<n;i++){ array[i] = scan.nextInt(); } Arrays.sort(array);//对输入的数组进行排序 //对排好序的数组中重复的数组进行选择输出,首先输出第一个数 System.out.println(array[0]); for(int i=1;i<n;i++){ if(array[i] != array[i-1]) System.out.println(array[i]); } } } }
import java.util.*; //测试数据有多组 public class Main{ public static void main(String[] args){ int N=0; Set<Integer> set=new TreeSet<Integer>(); //set没有排序的方法, //可以Set set = new TreeSet() //TreeSet存储的时候已经是排好序的 Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ N=scanner.nextInt(); set.clear(); for(int i=0;i<N;i++){ set.add(scanner.nextInt()); } Iterator<Integer> it=set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } } }
int main()
{
int Bucket[ 1001 ] = { 0 };
int Num;
int Tmp;
int i;
while( scanf( "%d", &Num ) != EOF ){
while( Num > 0 ){
scanf( "%d", &Tmp );
Bucket[ Tmp ] = 1;
Num–;
}
for( i = 1; i <= 1000; ++i ){
if( Bucket[ i ] != 0 ){
printf( "%dn", i );
Bucket[ i ] = 0;
}
}
}
return 0;
}
1)hash表 2)STL的set #include<iostream> #include<set> #include<vector> using namespace std; int main(){ //用一个数组作为哈希表 /*int n; while(cin>>n){ vector<int> input(1001,0); int tmp; for(int i = 0; i < n; ++i){ cin>>tmp; input[tmp]++; } for(int i = 1; i <= 1000; ++i){ if(input[i] > 0) cout<<i<<endl; } }*/ //使用stl的set int n; set<int> intSet; while(cin>>n){ int tmp; for(int i = 0; i < n; ++i){ cin>>tmp; intSet.insert(tmp); } set<int>::iterator it; for( it = intSet.begin(); it != intSet.end(); ++it) cout<<*it<<endl; intSet.clear(); } return 0; }
#include<iostream> #include<algorithm> using namespace std; int main() { int n; int c; while(cin>>n) { int *a=new int[n];动态分配数组a for(int i=0;i<n;i++) { cin>>c; a[i]=c; } sort(a,a+n); for(int i=0;i<n;i++) { if(a[i]!=a[i+1]) cout<<a[i]<<endl; } delete []a;释放数组a内存 } return 0; } //使用set容器其实更方便,便于处理更复杂的问题; //#include<iostream> //#include<algorithm> //#include<set> //using namespace std; // //int main() // { // int n; // int c; // set<int> s; // while(cin>>n) // { // for(int i=0;i<n;i++) // { // cin>>c; // s.insert(c); // } // // for(set<int>::const_iterator p=s.begin();p!=s.end();p++) // { // cout<<*p<<endl; // } // s.clear(); // } // return 0; //}
while True: try: n=int(input()) r=[] for i in range(n): r.append(int(input())) for i in sorted(set(r)): print(i) except: break
//开始288通不过,后来改为while(cin>>n) 将输出放到这个while循环内,就能够通过了 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, iA; while (cin >> n) { vector<int> inputArray; bool flag = true; for (int i = 0; i < n; i++) { cin >> iA; for (int j = 0; j < inputArray.size(); j++) { if (iA == inputArray[j]) { flag = false; break; } } if (flag) { inputArray.push_back(iA); } flag = true; } sort(inputArray.begin(), inputArray.end()); vector<int>::iterator it; for (it = inputArray.begin(); it != inputArray.end(); it++) { cout << *it << endl; } } return 0; }
运行时间:18ms
占用内存:5348k
while(line=readline()){ var arr = []; for(var i = 0; i<line; i++){ arr.push(readline()); } var arr1 = [...new Set(arr)]; //console.log(arr1); arr1.sort(function(a,b){ return a-b; }) //console.log(arr1); for(var i = 0; i<arr1.length; i++){ console.log(arr1[i]); } }
此题解决思路是使用位图方法,或者也可以称之为hash的方法。即使用每一位为1,代表有数据,为0,代表没有数据(编写时使用bool类型代替以减少位运算的复杂操作,当然使用位运算,空间复杂度会降低8倍)。
该方法应用很广,现在的大数据处理(比如求1亿个整数的最大前10个整数,先分块,而每一小块就可以用该方法计算,最后在归并),以及sgi stl版本中的二级空间配置器,malloc的底层实现,伙伴系统等常用的内存管理中都有用到。
#include<iostream> #include<vector> int main() { int num,tmp; while(std::cin >> num) { std::vector<bool> vec(1000, false); while(num--) { std::cin >> tmp; vec[tmp - 1] = true;; } int num_vector = vec.size(); for(int i = 0; i < num_vector; ++i) { if(vec[i]) { std::cout << i + 1 << std::endl; } } } return 0; }
以上就是关于问题明明生成了个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。 数据范围: ,输入的数字大小满足的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训