有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
若序列中有多个指定的数,需要一起删除。
数据范围:序列长度和序列中的值都满足 
第一行输入一个整数(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;
}