A.排序去重
有n 个1 到 1000 之间的整数 ,对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再按照指定的排序方式把这些数排序。
输入格式
第 1 行为字母 A 或 D,A 表示按照升序排序,D 表示按照降序排序。
第 2 行开始有若干个用一个空格或换行符分隔的正整数。
输出格式
相互之间用一个空格分隔的经去重和排序后的正整数。最后一个数后没有空格。
input
A
20 40 32 67 40 20 89 300 400 15
output
15 20 32 40 67 89 300 400
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100;
bool cmpD(int a,int b){ //降序
return a>b ;
}
void solve (char order){
int arr[N];
int i =0 ;
while(cin >> arr[i]){ //EOF结束输入
i++;
}
if(order == 'A'){
sort(arr,arr+i); // 升序
}else{
sort(arr,arr+i,cmpD);
}
int carr[i] = {arr[0]};
int cnt = 0;
for(int j =1 ;j < i ;j++){//去重
if(carr[cnt]!=arr[j]){
cnt ++;
carr[cnt] = arr[j];
}
}
for(int i =0 ;i < cnt+1;i++){
cout << carr[i] << " ";
}
}
int main()
{
char order;
cin >> order;
// cin.get();
solve(order);
return 0;
}
收获
-
关于升序和降序
利用
sort(a,a+n,compare)
sort(a,a+n)
升序, 给【a,a+n)所指向的元素排序;-
sort 使用时得注明:
using namespace std
; 或直接打std::sort()
还得加上#include <algorithm>
头文件 -
关于compare(a,b)
/******降序*********/ bool cmp(int a int b){ return a > b ; //true时不交换 }//返回值只能是0 或1
-
-
关于
while(cin >>i);
- 当EOF(command+ z)结束输入或遇到与i不符合的数据类型时结束输入