来自编程语言初学练习赛第七场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++,给了我多少个小时的罚时..............(我没有生气!)
京公网安备 11010502036488号