输入n控制数组长度,去除数组中相同数字,剩余数字依次向前串
#include <stdio.h>
int main()
{
int i,j,a[20],n,k=0,m=0;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
for(k=j;k<n;k++)
{
a[k]=a[k+1];
}
m=m+1;
j=j-1;
}
}
for(i=0;i<n-m;i++)
{
printf("%d ",a[i]);
}
return 0;
}
这个不会运行时间过长
#include <stdio.h>
int main()
{
int i,j,a[20],n,k=0,m=0;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-m;i++)
for(j=i+1;j<n-m;j++)
{
if(a[i]==a[j])
{
for(k=j;k<n-m;k++)
{
a[k]=a[k+1];
}
m++;
j--;
}
}
for(i=0;i<n-m;i++)
{
printf("%d ",a[i]);
}
return 0;
}
我按照你的代码风格写了个程序,自己看一下吧
#include <stdio.h>
int main()
{
int i,a[20],n,m=0;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)if(m==0||a[i]!=a[m-1])a[m]=a[i],m=m+1;
for(i=0;i<m;i++)
{
printf("%d ",a[i]);
}
return 0;
}
有疑问可以问我
update
题主不好意思,我意思理解错了
更新一下
#include<cstdio>
#include<algorithm>
const int SIZE=20;
int n,m;
struct number
{
int id,x;
}a[SIZE+1];
bool cmp1(number x,number y){return x.x<y.x;}
bool cmp2(number x,number y){return x.id<y.id;}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)a[i].id=i,scanf("%d",&a[i].x);
std::sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++)
if(m==0||a[m].x!=a[i].x)
a[++m]=a[i];
std::sort(a+1,a+m+1,cmp2);
for(int i=1;i<=m;i++)printf("%d ",a[i].x);
return 0;
}