C语言 已知一个整型数组的数按从小到大排列,去除数组中的重复数 并输出,我不知道怎么错了,,

如题所述

算法错误。下标越界、有三个及以上连续输重复时无法只保留一个,问题太多了。

for循环的括号包括范围不正确,for语句的错误既包括算法错误,也包括格式错误。

最后输出语句也不对。

这个程序基本上全错了。

#include <stdio.h>
int main()
{
int a[10];
int i,j,n=10;//增加变量n
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)//i<10改为i<n-1
{
if(a[i+1]==a[i])
{
for(j=i;j<n-1;j++)//j=i+1改为j=i,j<10改为j<n-1
a[j]=a[j+1];
i--;//增加此句
n--;//增加此句
}
}//增加括号
for(i=0;i<n;i++)//增加此句
printf("%d ",a[i]);
//}//此句删除
return 0;
}追问

为什么要加那个i--呢

😁😁

追答

这是因为如果连续三个以上的数是重复数,只能保留一个。
例如:1 2 2 2 3 4 5 6 7 8
当i=1时,发现a[2]=1,重复,那么从a[2]开始,每个数都等于它后面一个数,变为
1 2 2 3 4 5 6 7 8,此时如果没有i--,那么i继续执行循环,i=2,和后面继续比较,就把前面的2漏过去了。结果是1 2 2 3 4 5 6 7 8,仍然有重复数。

追问

昂 就是每次都从重复数的第一个开始扫描 知道没有多余数再开始下一个数是吧

追答

是的。这样才能保证只保留一个。

追问

哎呀 太厉害了,,,

谢谢了 太感谢了 想了好长时间呢

追答

基础题目而已。这个算法不算什么。关键是看你的逻辑思维能力怎么样,逻辑思维能力很重要。

追问

你好 问下 定义函数时返回值类型和形参一定要一样吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-31
使用i+1下标与j+1下标导致数组超界

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网