关于数组去重问题

GGS_521 2010-09-12 05:30:05
#include<stdio.h>
void main()
{
int A[10],i,j,m,n=0;
for(i=1;i<=10;i++)
scanf("%d",&A[i]);
for(i=1;i<10-n;i++)
for(j=i+1;j<=10-n;j++)
if(A[i]==A[j])
{
for(m=j+1;m<=10-n;m++)
{
A[m-1]=A[m];
}
n+=1;
}
printf("%d",n);
for(i=1;i<=10-n;i++)
printf("%3d",A[i]);
}
这段代码有问题,本人研究了很长时间,大家帮忙给看看。
...全文
420 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger413 2010-09-12
  • 打赏
  • 举报
回复
你的代码是有问题,你假设前两上数或是最后两上数相等的时候,不会被去掉重复数。看一下改变的地方。
#include<stdio.h>
void main()
{
int A[10],i,j,m,n=0;
for(i=1;i<=10;i++)
scanf("%d",&A[i]);
for(i=0;i<10-n;i++) //要从第一个数开妈比较。
for(j=i+1;j<=10-n;j++)
if(A[i]==A[j])
{
A[j]=0; //这里是为了保证最后一个数跟前面的数相等时,要把最后一个数清零。
for(m=j+1;m<=10-n;m++)
{
A[m-1]=A[m];
}
n+=1;
}
printf("%d",n);
for(i=1;i<=10-n;i++)
printf("%3d",A[i]);
}
目前只发现这两个问题。
GGS_521 2010-09-12
  • 打赏
  • 举报
回复
谢谢了,试验成功。
wogan1 2010-09-12
  • 打赏
  • 举报
回复
其实主要是两个问题,一个是数字越界了,C的数组是从0开始的,与BASIC不同
第二个是原来的程序不能检出连续的重复,加一句j--即可
wogan1 2010-09-12
  • 打赏
  • 举报
回复

#include<stdio.h>
void main()
{
int A[11],i,j,m,n=0;
for(i=1;i<=10;i++)
scanf("%d",&A[i]);
for(i=1;i<10-n;i++)
for(j=i+1;j<=10-n;j++)
if(A[i]==A[j])
{
for(m=j+1;m<=10-n;m++)
{
A[m-1]=A[m];
}
n+=1;
j--;
}
printf("%d",n);
for(i=1;i<=10-n;i++)
printf("%3d",A[i]);
}

这样应该可以了

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧