题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1122
Description
小明的老师布置了一份调查作业,小明想在学校中随机找N个同学一起做一项问卷调查,聪明的小明为了实验的客观性,他先随机写下了N个1到1000之间的整数(0<N≤1000),不同的数对应着不同的学生的学号。但他写下的数字难免会有重复数字,小明希望能把其余重复的数去掉,然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
Input
输入有2行,第1行为1个正整数,表示整数的个数:N.
第2行有N个用空格隔开的正整数,表示小明写下的N个整数。
Output
输出也是2行,第1行为1个正整数M,表示不相同的整数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的整数。
Sample Input
10
20 40 32 67 40 20 89 300 400 15
Sample Output
8
15 20 32 40 67 89 300 400
题意描述:
输入正整数的个数n及n个正整数
计算并输出该无重复的上升序列
解题思路:
运用桶排序,再将其从小到大输出即可
程序代码:
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int n,i,a[1010],x,flag,count; 6 while(scanf("%d",&n) != EOF) 7 { 8 memset(a,0,sizeof(a)); 9 for(count=0,i=1;i<=n;i++) 10 { 11 scanf("%d",&x); 12 if(a[x]==0) 13 count++; 14 a[x]=1; 15 } 16 printf("%d ",count); 17 for(flag=0,i=0;i<1005;i++) 18 { 19 if(a[i]) 20 { 21 if(flag) 22 printf(" %d",i); 23 else 24 { 25 flag=1; 26 printf("%d",i); 27 } 28 } 29 } 30 printf(" "); 31 } 32 return 0; 33 }