明明生成了个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
明明生成了个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。
输出多行,表示输入数据处理后的结果
3 2 2 1
1 2
输入解释: 第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到500之间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为: 2 2 1 所以样例的输出为: 1 2
#不用排序也能按顺序输出 while(1): try: x = range(0,1001) n = input() for s in range(1,n+1): x[input()]='y' for i in range(1,1001): if x[i] == 'y': print i except: break
提供一个边输入边申请空间排序的解法
#include <stdio.h> int cmp(int *a, int *b){ return *a-*b; } int main(){ int N = 0; //输入为空时结束 while(~scanf("%d\n",&N)){ int num = 0; //留出一个位置用于设置结束条件 int *p = (int *)malloc(sizeof(int)*(N+1)); //清空内存 memset(p,0,sizeof(int)*(N+1)); for(int i=0; i<N; i++){ scanf("%d\n",&p[i]); } //快排函数运用,只排序前N个 qsort(p,N,sizeof(int),cmp); int *t = p; //不清空内存就要在这设置 t[N] = '\0'; //用while的坏处就是结尾后面如果连接别的数据就会继续循环 while(*t != '\0'){ // if(*t == num){ // *t++; // continue; // } // else{ // num = *t++; // printf("%d\n",num); // } if(*t != *(t-1)) printf("%d\n",*t); *t++; } free(p); t = NULL; } return 0; }
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; while(cin>>n) { vector<int> nums(n,0); for(int i = 0;i<n;i++) { cin>>nums[i]; } sort(nums.begin(),nums.end()); for(int i = 0;i<n;i++) { if(i>0&&nums[i]==nums[i-1]){continue;} cout<<nums[i]<<endl; } } }一个数组两次遍历,完事
while(len = parseInt(readline(), 10)) { const buffer = Array(len).fill(0).map(() => parseInt(readline(), 10)); console.log([...new Set(buffer.sort((a, b) => a - b))].join('\n')) }
#include<iostream> using namespace std; int main() { int data[1001] = {0}; int n; int d; int max_index; while(cin>>n) {max_index = 0;while(n--) { cin >> d; data[d] = 1; max_index = d > max_index ? d : max_index; } for(int i=1;i <= max_index; i++) { if (data[i] == 1) { cout << i << '\n'; data[i] = 0; } } } }
// 自测没问题,保存并提交就出问题了,牛客你为什么这么烂!!!! const listNum = []; var data = ''; var size = 0; while(data = readline()){ if (size === 0) { size = data } else { size--; listNum.push(data); } } const sortList = listNum.sort((a, b) => a - b); console.log(sortList .filter((item, index) => item !== sortList[index + 1]) .join('\n')) // 自测没问题,保存并提交就出问题了,牛客你为什么这么烂!!!!
#include <stdio.h> static const int MAX_NUM = 1001; void srotArray(int* array,int num) { int temp[MAX_NUM] = {0}; int i; for(i=0;i<num;i++) { temp[array[i]] = 1; } for(i=0;i<MAX_NUM;i++) { if(temp[i]==1) printf("%d\n",i); } } int main() { int num = 0; int ch = 0; int ret = 0; int array[MAX_NUM] = {0}; while(1) { ret = scanf("%d",&num); if(ret<=0) { break;//读取失败返回0,退出。 } for(int i = 0;i<num;i++) { array[i] = 0; } for(int i = 0;i<num;i++) { ret = scanf("%d",&ch); if(ret<=0) { continue;//读取失败返回0,退出。 } array[i] = ch; } srotArray(array,num); } }
var arr=[]; var start=0; var num=0; while(line=parseInt(readline())){ if(start==0){ num=line; } else if(start<=num) { arr.push(line); } else{ start=0; num=line; } start++; } arr.sort((a,b)=>{return a-b}); for(var i=0;i<arr.length;i++){ if(i==0) console.log(arr[0]); else if(arr[i]==arr[i-1]) continue; else console.log(arr[i]); }(javascript v8 代码)题目有错误。输入跟实际输入不一致,导致我的代码一直运行不了。
插入排序一遍遍历,边遍历边去重
def insert_sort(arr): nums = set() dup_nums = 0 i = 1 nums.add(arr[0]) while i < len(arr): key = arr[i] if key in nums: dup_nums = dup_nums + 1 i = i + 1 continue nums.add(key) j = i - 1 - dup_nums while j >= 0 and arr[j] > key: arr[j+1], arr[j] = arr[j], arr[j+1] j = j - 1 arr[j+1], key = key, arr[j + 1] i = i + 1 return arr[:len(arr)-dup_nums]
[61,25,29,105,52,108,73,58,38,64,14,55,98,94,102,35,60,68,15,27,103,73,55,35,33,47,35,16,31,108,46,65,89,13,51,51,99,113,66,111,99,64,54,117,20,14,106,9,29,11,25,100,58,79,69,84,106,59,92,42,11,92]
排序去重之后少了第一个元素 61
以下是测试样例的结果:
[9, 11, 13, 14, 15, 16, 20, 25, 27, 29, 31, 33, 35, 38, 42, 46, 47, 51, 52, 54, 55, 58, 59, 60, 64, 65, 66, 68, 69, 73, 79, 84, 89, 92, 94, 98, 99, 100, 102, 103, 105, 106, 108, 111, 113, 117]
实际正确的结果:
[9, 11, 13, 14, 15, 16, 20, 25, 27, 29, 31, 33, 35, 38, 42, 46, 47, 51, 52, 54, 55, 58, 59, 60, 61, 64, 65, 66, 68, 69, 73, 79, 84, 89, 92, 94, 98, 99, 100, 102, 103, 105, 106, 108, 111, 113, 117]
#include<stdio.h> #include<iostream> #include<set> using namespace std; int main() { std::set<int> eliminate_repeat; int num; while(std::cin>>num) { while(num--) { int value; std::cin >> value; eliminate_repeat.insert(value); } for(auto i:eliminate_repeat) std::cout << i << std::endl; } return 0; }
#include <stdlib.h> (794)#include <stdio.h> #include <string.h> (845)#include <malloc.h> #define MAX_NUM 1001 int main() { int caseNum = 0, value = 0; int sortNumArry[MAX_NUM] = {0}; while(scanf("%d", &caseNum) != EOF) { while(caseNum-- && scanf("%d", &value)) { sortNumArry[value]++; } for(int i = 0; i < MAX_NUM; i++) { if(sortNumArry[i]) { printf("%d\n", i); } } memset(sortNumArry, 0, sizeof(sortNumArry)); } return 0; }说白了还是scanf的使用技巧,这种排数统计啥的都是空间换时间
import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Set<Integer> set = new TreeSet<Integer>(); while(scanner.hasNext()) { int n = scanner.nextInt(); int[] inputArray = new int[n]; for(int i = 0;i < n;i ++) { inputArray[i] = scanner.nextInt(); set.add(inputArray[i]); } for (Integer i : set) { System.out.println(i); } set.clear(); } scanner.close(); } }TreeSet即可解决去重加排序的目的
#include<iostream> using namespace std; short handle(short*arr,short start,short end){ while(start<end){ while(start<end&&arr[start]<=arr[end])--end; short tmp=arr[start]; arr[start]=arr[end]; arr[end]=tmp; while(start<end&&arr[start]<=arr[end])++start; tmp=arr[start]; arr[start]=arr[end]; arr[end]=tmp; } return start; } void quick_sort(short *arr,short start,short end){ if(start>=end)return; short tmp=handle(arr,start,end); quick_sort(arr,start,tmp-1); quick_sort(arr,tmp+1,end); } int main(){ short n; while(cin>>n){ short end=n-1,tmp; short arr[n]; while(n>0&&cin>>tmp){ arr[end+1-n]=tmp; --n; } quick_sort(arr,0,end); int i=0,j=1; cout<<arr[0]<<endl; for(;j<=end;++i,++j) if(arr[i]!=arr[j])cout<<arr[j]<<endl; } }
#include<cstdio> (802)#include<iostream> #include<algorithm> using namespace std; const int maxn = 2020; int main() { int n; int num[maxn] = { -1 }; while (cin >> n) { for (int i = 0;i < n;i++) { cin >> num[i]; } sort(num, num + n); for (int i = 0;i < n;i++) { if (num[i] != num[i - 1] || i == 0) { cout << num[i] << endl; } } } return 0; }