描述 | 明明想在學校中請一些同學一起做一項問卷調查,爲了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應着不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作。
Input Param n 輸入隨機數的個數 inputArray n個隨機整數組成的數組
Return Value OutputArray 輸出處理後的隨機整數
注:測試用例保證輸入參數的正確性,答題者無需驗證。測試用例不止一組。 |
---|---|
知識點 | 字符串,循環,大小寫字母 |
運行時間限制 | 0M |
內存限制 | 0 |
輸入 | 輸入多行,先輸入隨機整數的個數,再輸入相應個數的整數 |
輸出 | 返回多行,處理後的結果 |
樣例輸入 |
11 10 20 40 32 67 40 20 89 300 400 15樣例輸出
10 15 20 32 40 67 89 300 400
C語言實現
先排序後查重刪除
#include<stdio.h>
int main(void) {
int num;
int inputArray[1000];
int outputArray[1000];
int i, j;
// 輸入num個數據
while(scanf("%d",&num)!=EOF){
for (i=0; i<num; i++) {
scanf("%d", &inputArray[i]);
}
// 先冒泡排序——兩個for循環解決問題
for (i=0; i<num; i++) {
for (j=i+1; j<num; j++) {
if (inputArray[i]>inputArray[j]) {
int temp = inputArray[i];
inputArray[i] = inputArray[j];
inputArray[j] = temp;
}
}
}
// 再查重——for循環
j = 0;
for (i=0; i<num; i++) {
outputArray[j++] = inputArray[i];
while (inputArray[i] == inputArray[i+1]) { //判斷有無多個重複的數
i++;
}
}
// 輸出處理後的數組
for (i=0; i<j; i++)
printf("%d\n",outputArray[i]);
}
}
先查重刪除後排序
#include<stdio.h>
int main()
{
int n,a[10000],i,j,k,temp;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]==a[j]) // 先查重
{
for(k=j+1;k<n;k++) // 判斷有無多個重複的數
a[k-1]=a[k];
n--;
j--;
}
}
}
for(i=0;i<n-1;i++) // 再排序
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
printf("%d\n",a[i]);
}
}
1.EOF用法
關於c語言中EOF用法的理解 - CSDN博客 點擊打開鏈接
桶排序及C語言實現 - CSDN博客點擊打開鏈接