int main 2333 2022-03-30 16:45 采纳率: 88.1%
浏览 65
已结题

对N个1到1000之间的随机整数(N≤100),每个数字保留1个并从小到大排序。,正确率只有55%,不知道哪里有问题

#include <stdio.h>
#include <string.h>
int main()
{
int n,i,m,j;
scanf("%d\n",&n);
int arr[100];
for(i=0;i<n;i++)
{
scanf("%d",&m);
getchar();
arr[i]=m;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]==arr[j])
{
arr[j]=arr[n-1];
n--;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
printf("%d\n",n);
for(i=0;i<n;i++)
printf("%d ",arr[i]);
return 0;
}

  • 写回答

2条回答 默认 最新

  • 於黾 2022-03-30 17:32
    关注

    我知道了,你这是去重的时候就有问题了。
    你在删掉一个元素之后,需要执行j--,让它退回到上一步去重新判断,否则有多个相同的连续重复值时,会有的没被删掉。
    不要图省事,觉得把最后一个元素拿到当前位置也一样
    就老老实实的把j后面的所有元素往前挪一个位置,是最稳妥的办法

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 关于redhat虚拟机系统新建卷的问题
  • ¥50 WRFDA读取风云四号A 星的GIIRS数据
  • ¥15 C# 爬虫融通金网址实时银价
  • ¥15 热敏电阻NTC,温控不同颜色的LED的亮与灭,PCB
  • ¥20 ESP32使用MicroPyhon开发,怎么获取485温湿度的值,温湿度计使用的鞋子是Modbus RTU
  • ¥50 苹果MGIE项目部署缺少emb权重
  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了