求大神改代码.排序去重.Description 有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序.Input 第1行为字母A或D,A
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/27 14:09:50
![求大神改代码.排序去重.Description 有n个1到1000之间的整数(1≤n≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉.然后再按照指定的排序方式把这些数排序.Input 第1行为字母A或D,A](/uploads/image/z/8354744-8-4.jpg?t=%E6%B1%82%E5%A4%A7%E7%A5%9E%E6%94%B9%E4%BB%A3%E7%A0%81.%E6%8E%92%E5%BA%8F%E5%8E%BB%E9%87%8D.Description+%E6%9C%89n%E4%B8%AA1%E5%88%B01000%E4%B9%8B%E9%97%B4%E7%9A%84%E6%95%B4%E6%95%B0%EF%BC%881%E2%89%A4n%E2%89%A4100%EF%BC%89%2C%E5%AF%B9%E4%BA%8E%E5%85%B6%E4%B8%AD%E9%87%8D%E5%A4%8D%E7%9A%84%E6%95%B0%E5%AD%97%2C%E5%8F%AA%E4%BF%9D%E7%95%99%E4%B8%80%E4%B8%AA%2C%E6%8A%8A%E5%85%B6%E4%BD%99%E7%9B%B8%E5%90%8C%E7%9A%84%E6%95%B0%E5%8E%BB%E6%8E%89.%E7%84%B6%E5%90%8E%E5%86%8D%E6%8C%89%E7%85%A7%E6%8C%87%E5%AE%9A%E7%9A%84%E6%8E%92%E5%BA%8F%E6%96%B9%E5%BC%8F%E6%8A%8A%E8%BF%99%E4%BA%9B%E6%95%B0%E6%8E%92%E5%BA%8F.Input+%E7%AC%AC1%E8%A1%8C%E4%B8%BA%E5%AD%97%E6%AF%8DA%E6%88%96D%2CA)
求大神改代码.排序去重.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的数位即可 用空间换时间