有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
数据范围:序列长度和序列中的值都满足 
第一行输入一个整数(0≤N≤50)。
第二行输入N个整数,输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出为一行,删除指定数字之后的序列。
6 1 2 3 4 5 9 4
1 2 3 5 9
5 1 2 3 4 6 5
1 2 3 4 6
#include<stdio.h> int main() { int N = 0,arr[50] = {0},num = 0,count = 0; scanf("%d",&N); for(int i = 0;i < N;i++) scanf("%d",&arr[i]); scanf("%d",&num); for(int i = 0;i < N - count;i++){ if(arr[i] == num){ for(int j = i;j < N - count - 1;j++) arr[j] = arr[j + 1]; count++; i--; } } for(int i = 0;i < N - count;i++) printf("%d ",arr[i]); return 0; }
#include<stdio.h> int main() { int N; scanf("%d",&N); int arr[N]; for(int i=0;i<N;i++){ scanf("%d",&arr[i]); } int x; scanf("%d",&x); for(int i=0;i<N;i++){ if(arr[i]!=x){ printf("%d ",arr[i]); } } return 0; }
n = int( input() ) num_list = [ int(x) for x in input().split() ] del_num = int( input() ) new_list = num_list[:] m = 0 for i in range( n ): if num_list[i] == del_num: del new_list[i-m] m += 1 for j in range( len( new_list ) ): print( '%d '%( new_list[j] ), end='' )
n = int( input() ) num_list = [ int(x) for x in input().split() ] del_num = int( input() ) i = 0 while i < len( num_list ): if num_list[i] == del_num: del num_list[i] else: i += 1 for j in range( len( num_list ) ): print( '%d '%( num_list[j] ), end='' )
#include<stdio.h> int main(){ int n,x,s[50]; int i,j=0; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&s[i]); } scanf("%d",&x); for(i=0;i<n;i++){ if(s[i]!=x){//如果不是要删除的那个元素,则数组正常遍历,如果找到了,就覆盖 s[j++]=s[i]; } } for(i=0;i<j;i++){ printf("%d ",s[i]); } printf("\n"); }
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; // lambda式解法 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); List<String> list = new ArrayList<>(); for (int i = 0; i < n; i++) { int temp = sc.nextInt(); list.add(Integer.toString(temp)); } String key = Integer.toString(sc.nextInt()); //使用filter过滤掉key的元素 list = list.stream() .filter(e->!e.equals(key)) .collect(Collectors.toList()); //每个list元素中间使用空格分割 String s = list.stream().collect(Collectors.joining(" ")); System.out.println(s); } } }
#include<stdio.h> int main() { int n = 0; scanf("%d",&n); int arr[50]; int i = 0; int j = 0; for(i = 0;i<n;i++) { scanf("%d ",&arr[i]); } int x = 0;//要删除的一个整数 scanf("%d ",&x); for(i = 0;i<n;i++) { /*if(arr[i]!=x) { printf("%d ",arr[i]); }*///投机取巧写法 if(arr[i]!=x) { arr[j++] = arr[i]; } } for(i = 0;i<j;i++) { printf("%d ",arr[i]); } return 0; }
#include<stdio.h> int main() { int a=0; scanf("%d",&a); int arr[50]; for(int i=0;i<a;i++) { scanf("%d",&arr[i]); } int del=0;//需要删除的数 scanf("%d",&del); int j=0;//j属于我们构建删除数列的下标 for(int i=0;i<a;i++)//遍历原来的数组每个数 { if(arr[i]!=del)//假如不等于要删去的数,就加入数列,否则不加入 { arr[j]=arr[i]; j++; } } for(int i=0;i<j;i++)//数组一共有j个数 { printf("%d ",arr[i]); } return 0; }
#include<cstdio> (802)#include<iostream> using namespace std; int main() { int n; int a[51] = {0}; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } int m; cin >> m; for (int i = 0; i<n;i++) { if (a[i] != m) { cout << a[i]<<" "; } } return 0; }
#include <stdio.h> int main(){ int n, target, count_target = 0; int arr[50] = {0}; scanf("%d",&n); for(int i = 0; i < n; i++){ scanf("%d",&arr[i]); } scanf("%d",&target); // 统计目标值的个数,并在遇到每个非目标值时 // 前移相应个数的距离 for(int i = 0; i < n; i++){ if(arr[i] == target){ count_target++; } else { arr[i - count_target] = arr[i]; } } for(int i = 0; i < n - count_target; i++){ printf("%d ",arr[i]); } return 0; }
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int arr[n];//c99use int i = 0; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } int del = 0; scanf("%d", &del); int j = 0; for (i = 0; i < n; i++) { if (arr[i] != del) { arr[j] = arr[i]; j++; } } for (i = 0; i < j; i++) { printf("%d ", arr[i]); } return 0; }
#include<stdio.h> #include<stdlib.h> #include<assert.h> void Del(int* arr, int n, int k) { assert(arr); int i = 0; for (i = 0; i < n; i++) { if (arr[i] == k) { continue; } printf("%d ", arr[i]); } } int main() { int n = 0; scanf("%d", &n); int* arr = (int*)calloc(n, sizeof(int)); if (arr == NULL) { perror("main -> calloc"); return 1; } for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } int k = 0; scanf("%d", &k); Del(arr, n, k); free(arr); arr = NULL; return 0; }运用动态内存开辟实现
#include<stdio.h> int main() { int N , a[50] , del , b[50] , sum = 0; scanf("%d",&N); for(int i = 0 ; i < N ; i++) scanf("%d",&a[i]); scanf("%d",&del); for(int i = 0 , j = 0 ; i < N ; i++ , j++) { if(a[i] != del) b[j] = a[i]; else { j--; sum++; //记录删了几个数 } } for(int l = 0 ; l < N - sum ; l++) printf("%d ",b[l]); return 0; }