来自编程语言初学练习赛第七场H题,题目如下


有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

输入描述:

	
	

第一行输入一个整数(0≤N≤50)。

第二行输入N个整数,输入用空格分隔的N个整数。

第三行输入想要进行删除的一个整数。

输出描述:

输出为一行,删除指定数字之后的序列。
这是我写的代码,并未通过.....(我果然很菜)
#include"stdio.h"
#define N 51
int main()
{
    int delet;
    int t;
    int i,j,n;
    int a[N];
    for(int i=0;i<51;i++)
        a[i]=1000;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=1;i<=n-1;i++)
    {
        for(j=0;j<n-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    scanf("%d",&delet);
    for(i=0;i<n;i++)
    {
        if(a[i]==delet)
        {
            for(j=i;j<=n;j++)
                a[j]=a[j+1];
            n--;
            i=0;
        }
    }
    for(j=0;j<n;j++)
        printf("%d ",a[j]);
}
自测没问题,OJ不过那就是OJ的问题(疯狂骗自己)

以下是某不知名的dalao那里复制的AC代码(膜拜dalao)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = 0, m = 0;
        n = sc.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++){
            arr[i] = sc.nextInt();
        }
        m = sc.nextInt();
    
        List<Integer> list = removeTargetNum(arr,m);
        for(Integer i : list){
            System.out.print(i + " ");
        }
    }
    public static List<Integer> removeTargetNum(int[] arr,int m){
        if(arr==null){
            return null;
        }
        List<Integer> list = new ArrayList<>();
        for(int i : arr){
            if(i!=m){
                list.add(i);
            }
        }
        return list;
    }
}
恕我无能,暂时还看不懂JAVA(QAQ)

我的思路是,先将数组中的数与要删除的数作比较,找到相等的数后直接,让后面的每一个数赋值给前一个,这样就覆盖了要删除的数,以此类推,会删掉所有要删除的数

然而现实很残酷......

哪里出了bug呢.......在敲这篇文章的同时我又去康了一下......发现个问题......

我在if语句的最后将i重新归零,但我忘了i++这个讨厌的东西.....

它导致我的i并没有归0而是归了1......

我机制地把i=0改成了i=-1.....(哈哈哈不愧是我)

以下是我的AC代码......(没想到敲文章也能过题.....)
#include"stdio.h"
#define N 51
int main()
{
    int delet;
    int t;
    int i,j,n;
    int a[N];
    for(int i=0;i<51;i++)
        a[i]=1000;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&delet);
    for(i=0;i<n;i++)
    {
        if(a[i]==delet)
        {
            for(j=i;j<=n;j++)
                a[j]=a[j+1];
            n--;
            i=-1;
        }
    }
    for(j=0;j<n;j++)
        printf("%d ",a[j]);
}
这i++,给了我多少个小时的罚时..............(我没有生气!)