新人求解怎么能不运行时间过长?

输入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;
}

2个回答

这个不会运行时间过长

 #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;
}

Nocrossnocrown
Nocrossnocrown 回复zhouyuheng2003: 我看不懂大神下面那个程序。。。
11 个月之前 回复
Nocrossnocrown
Nocrossnocrown 回复zhouyuheng2003: 我是编程小白,只能在我自己程序的基础上改到这样了,还没考虑到那么多
11 个月之前 回复
Nocrossnocrown
Nocrossnocrown 我是编程小白,只能在我自己程序的基础上改到这样了,还没考虑到那么多
11 个月之前 回复
zhouyuheng2003
zhouyuheng2003 您这不是很优吧,1000000的输入就跑不过了
11 个月之前 回复

我按照你的代码风格写了个程序,自己看一下吧

#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;
}
zhouyuheng2003
zhouyuheng2003 回复Nocrossnocrown: 不好意思,我输了几个数据他的程序没跑出来,题意理解错了
11 个月之前 回复
Nocrossnocrown
Nocrossnocrown 我试了一下输入5\n1 2 3 4 1输出1 2 3 4 1
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!