作业帮 > 综合 > 作业

求大神改代码.排序去重.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/03 19:53:02
求大神改代码.排序去重.
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
求大神改代码.排序去重.
一点点小问题 已修改#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的数位即可 用空间换时间