求大神改代码.排序去重.Description 有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序.Input 第1行为字母A或D,A
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/27 11:16:13
求大神改代码.排序去重.Description 有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序.Input 第1行为字母A或D,A
求大神改代码.排序去重.
Description
有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序.
Input
第1行为字母A或D,A表示按照升序排序,D表示按照降序排序.
第2行开始有若干个用一个空格或换行符分隔的正整数.
Output
相互之间用一个空格分隔的经去重和排序后的正整数.最后一个数后没有空格.
Sample Input
A
20 40 32 67 40 20
89 300 400 15
Sample Output
15 20 32 40
67 89 300 400
#include
#include
#define N 100
int cmp1(const void* a,const void* b)
{
return *(int*)a - *(int*)b;
}
int cmp2(const void*a,const void* b)
{
return *(int*)b - *(int*)a;
}
int main()
{
char order;
char b;
int v[N],n=0,i,m,j;
scanf("%c",&order);
while(1)
{
scanf("%d",&v[n++]);
scanf("%c",&b);
if(b == '\n') break;
}
if(order =='A') qsort(v,n,sizeof(int),cmp1);
if(order =='D') qsort(v,n,sizeof(int),cmp2);
printf("%d ",v[0]);
for(i=0;i
求大神改代码.排序去重.Description 有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序.Input 第1行为字母A或D,A
一点点小问题 已修改
#include <stdio.h>#include <stdlib.h>
#define N 100
int cmp1(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int cmp2(const void*a, const void* b)
{
return *(int*)b - *(int*)a;
}
int main()
{
char order;
char b;
int v[N], n=0, i,m,j;
scanf("%c",&order);
while(scanf("%d",&v[n]) == 1)n++;
if(order =='A') qsort(v,n,sizeof(int),cmp1);
if(order =='D') qsort(v,n,sizeof(int),cmp2);
// printf("%d ",v[0]);
for(i=0;i<n-1;)
{
if(v[i] ==v[i+1])
{
for(j=i+1;j<n-1;j++) {v[j] = v[j+1];}
n--;
}
else i++;
}
for(i=0;i<n-1;i++)
{printf("%d ",v[i]);}
printf("%d",v[i]);
return 0;
}
不懂可以追问
PS:算法上太复杂了 由于限定为1-1000的输入 所以可以建立一个map[1001]
然后每输入一个数字 就在对应位上标记为1
最后输入为1的数位即可 用空间换时间