首页 > 试题广场 >

序列中删除指定数字

[编程题]序列中删除指定数字
  • 热度指数:55083 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
若序列中有多个指定的数,需要一起删除。

数据范围:序列长度和序列中的值都满足

输入描述:

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

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

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



输出描述:
输出为一行,删除指定数字之后的序列。
示例1

输入

6
1 2 3 4 5 9
4

输出

1 2 3 5 9
示例2

输入

5
1 2 3 4 6
5

输出

1 2 3 4 6
int main()
{
	int count = 0;
	int num = 0;
	int delenum = 0;
	int nums[50];
	scanf("%d", &num);
	int i = 0;
	int n = 0;
	for (i = 0; i < num; i++)
	{
		scanf("%d", &nums[i]);
	}
	scanf("%d", &delenum);
	for (i = 0; i < num; i++)
	{
		if (nums[i] == delenum)
		{
			count++;
			for (n = i; n < num; n++)
			{
				nums[n] = nums[n + 1];
			}
            i--;
		}
	}
	for (i = 0; i < num - count; i++)
	{
		printf("%d ", nums[i]);
	}

	return 0;
}
遇到相同的就把当前的位置用后一位的数字覆盖掉再输出

发表于 2025-08-29 11:06:00 回复(0)
#include <stdio.h>

int main() {

int n=0;
int arr[51];
int d;
scanf("%d",&n);
int i=0;
for(i=0;i<n;i++)
{
    scanf("%d ",&arr[i]);
}
scanf("%d",&d);
for(i=0;i<n;i++)
{
    if(arr[i]==d)
    arr[i]=51;

}
for(i=0;i<n;i++)
{
    if(arr[i]!=51)
    printf("%d ",arr[i]);
}
    return 0;
}

感觉好搞笑
发表于 2025-07-20 23:13:40 回复(0)
想用递归但是想不出来

发表于 2025-06-19 21:09:54 回复(0)
三个思路:
可以记录这个数的下标,在打印的时候跳过,但这并不是真正的删除
1.最简单的方法,直接创建另一个数组,遍历原始数组,符合条件的数就移动到新数组中,打印新数组(但这不是在原数组上操作
2.找到所有要删除数字的位置和数量,然后第二个循环中,把其他数依次移到前面
3.从前往后直接遍历,找到第一个数后,先循环把后面的数挪到前面,再从这个位置开始继续往后找,找到一个就循环移动一次

主体
#include <stdint.h>
#include <stdio.h>

int main() {
    int n, a[60] = { 0 }, target;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    scanf("%d", &target);

    //安插代码

    return 0;
}

思路一
    int b[60], num = 0;
    for(int i = 0, j = 0; i < n; i++){
        if(a[i] != target){
            b[j] = a[i];
            j++;
        }
        else {
            num++;
        }
    }
    for(int i = 0; i < n-num; i++){
        printf("%d ", b[i]);
    }
思路二
    int b[60], num = 0;
    for(int i = 0, j = 0; i < n; i++){
        if(a[i] == target){
            b[j] = i;
            j++;
            num++;
        }
    }
    for(int i = 0, j = 0, k = 0; i < n; i++){
        if(i == b[j]){
            j++;
            continue;
        }
        else{
            a[k] = a[i];
            k++;
        }
    }
    for(int i = 0; i < n-num; i++){
        printf("%d ", a[i]);
    }
思路三
        int num = 0;
    for(int i = 0; i < n; i++){
        if(a[i] != target)
            continue;
        else{
            for(int j = i; j < n-num; j++){
                a[j] = a[j+1];
            }
            num++;
            i--;
        }
    }
    for(int i = 0; i < n-num; i++){
        printf("%d ", a[i]);
    }




发表于 2025-04-17 21:54:18 回复(0)
#include <stdio.h>
int main() {//序列中插入一个数,第一行N,第二行一个数组,第三行插入的数
    int a[50] = { 0 }, b, c = 0; int t = 0;
    while (scanf("%d", &b) != EOF) {//输入第一行
        for (int i = 0; i < b; i++) {//输入处二行
            int t = scanf("%d", &a[i]);
        }
        int c;
        scanf("%d", &c);//输入第三行
        for (int i = 0; i < b ; i++) { //删掉一个元素
            if (a[i] == c) {
                t++;
                for (int j = i; j <= b ; j++)
                    a[j] = a[j + 1];
                    i--;
            }
        }
    }
    for (int i = 0; i < b - t; i++) {//打印
        printf("%d ", a[i]);
    }
    printf("\n");
return 0;
}
发表于 2025-02-23 11:47:32 回复(0)
#include<stdio.h>
void My_scanf(int arr[],int n)  //录入数组
{
   int i = 0;
   for(i=0;i<n;i++)
   {
    scanf("%d ",&arr[i]);
   }
}
int adjust(int arr[],int k, int n) 
{
   int i = 0;
   int j = 0;
   int count = 0;
   for(i=0;i<n;i++)  //计算数组中需要剔除的数字的个数
   {
      if(arr[i]==k)
      {
        count++;
      }
   }
   for(i=0;i<n;i++)
   {
     if(arr[i]==k)   // 移位将需要剔除的全部放到数组后
     {
        for(j=i+1;j<n;j++)
        {
          if(arr[j]!=k)
          {
            int temp =arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            break; 
          }
        }
     }
     
   }
   return count;
}
void My_printf(int arr[],int n) // 打印不需要剔除的数
{
   int i = 0;
   for(i=0;i<n;i++)
   {
    printf("%d ",arr[i]);
   }
}
int main()
{
    int n = 0;
    int k = 0;
    scanf("%d\n",&n);
    int arr[n];
    My_scanf(arr,n);
    scanf("%d",&k);
    int ret = adjust(arr,k,n);
    n = n- ret;
    My_printf(arr,n);
    return 0;
}

发表于 2024-12-30 11:23:28 回复(0)
#include <stdio.h>
int main() {
    int n,a[50];
    int x,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&x);
for(i=0;i<n;i++)
{
	if(x==a[i])
	{
		a[i]=0;
	}
	if(a[i]!=0)
	printf("%d ",a[i]);
}
    return 0;
}

发表于 2024-09-25 20:06:59 回复(0)
#include <stdio.h>

void delete_printf(int array[], int len, int num);

int main()
{
    int N = 0, num = 0;
    scanf("%d", &N);
    int array[N];
    for(int i = 0; i < N; i++)
    {
        scanf("%d", &array[i]);
    }
    scanf("%d", &num);
    delete_printf(array, N, num);
    return 0;
}

void delete_printf(int array[], int len, int num)
{
    int i = 0;
    while(i < len)
    {
        if(num == array[i])
        {
            i += 1;
        }
        printf("%d ", array[i++]);
    }
}
发表于 2024-08-12 18:17:11 回复(0)
#include <stdio.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    int arr[10] = { 0 };
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int m = 0;
    scanf("%d", &m);
    for (int i = 0; i < n; i++)
    {
        if(arr[i]==m)
        {
            continue;
        }
        printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2024-08-10 13:57:11 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    int* a = (int*)malloc(sizeof(int) * n);
    int* b = (int*)malloc(sizeof(int) * n);

    for(int i = 0; i <n; i++)
    {
        scanf("%d", &a[i]);
    }

    int m = 0;
    scanf("%d", &m);
    int pb = 0;
    //在数组a中值不为m的,放到数组b中
    for(int i = 0; i < n; i++)
    {
        if(m != a[i])
        {
            b[pb++] = a[i];
        }
    }
    //输出删除的数组
    for(int i = 0; i < pb; i++)
    {
        printf("%d ", b[i]);
    } 

    free(a);
    free(b);
    a = b = NULL;

    return 0;
}

发表于 2024-06-28 02:09:33 回复(0)
#include <stdio.h>
#include <malloc.h>
#include <assert.h>

//p为数组首地址
//x为需要删除的数
//n为数组有效元素的数量
//flag标记是否需要继续进行删除操作
int Dele(int* p, int x, int n, int flag)
{
    assert(p);

    //每次递归将flag重置为1
    flag = 1;
    int i = 0;

    //寻找待需要删除的位置
    for (i = 0; i < n; i++)
    {
        //记录要删除元素的下标
        if (x == *(p + i))
        {
            flag = 0;
            break;
        }
    }

    //进行删除操作操作
    while (i < n)
    {
        //数组从前往后拉
        *(p + i) = *(p + i + 1);
        i++;
    }

    //如果flag仍为1,则表明没有元素需要删除,开始归并
    if(flag == 1)
    {
        return 0;
    }

    //如果程序走到这里,则表明还有元素需要删除
    //“1”为本轮删除的元素,“Dele(p, x, n - 1, flag)”为后续删除的元素数量
    return 1 + Dele(p, x, n - 1, flag);

}

int main()
{
    int n = 0;//数组的数量
    int* p = NULL;//数组的首地址
    int needDele = 0;//需要被删除的数
    int deleNum = 0;//需要被删除的个数
    int i = 0;
    int flag = 0;

    scanf("%d", &n);

    //开辟空间,用来存放数组
    p = (int*)malloc(sizeof(int) * n);
    if (!p)
    {
        perror("malloc");
        return 1;
    }

    //录入数列
    for (i = 0; i < n; i++)
    {
        scanf("%d", p + i);
    }

    //录入需要删除的整数
    scanf("%d", &needDele);

    //进行删除
    deleNum = Dele(p, needDele, n, flag);

    //输出结果
    for (i = 0; i < n - deleNum; i++)
    {
        printf("%d ", *(p + i));
    }

    //释放空间
    free(p);
    p = NULL;
    
    return 0;
}

发表于 2024-03-20 00:01:50 回复(0)
#include <stdio.h>

int main() {
    int n, x;
    scanf("%d", &n);
    int str[n];
    for(int i=0; i<n; i++){
        scanf("%d", &str[i]);
    }
    scanf("%d", &x);

    for(int i=0; i<n; i++){
        if(str[i] != x){
            printf("%d ", str[i]);
        }
    }
    return 0;
}

编辑于 2024-01-30 22:12:55 回复(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;
}

发表于 2024-01-14 17:32:57 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int arr[100] = { 0 };
    scanf("%d", &n);
    for (int i = 0; i <= n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == arr[n])
        {
            arr[i] = 0;
        }
    }
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
发表于 2023-12-11 10:00:55 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    int arr[100];
    int c = 0;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i = 0;i<n;i++)
        {
            scanf("%d",&arr[i]);
        }
        //要删除的数
        scanf("%d",&c);
        //排除掉要删的数
        for(int i = 0;i<n;i++)
        {
            if(arr[i]!=c)
            {
                printf("%d ",arr[i]);
            }
        }
    }
    return 0;
}

发表于 2023-11-18 20:44:58 回复(0)
#include<stdio.h>
int main()
{
    int arr[50] = { 0 };
    int temp[50] = { 0 };
    int n = 0;
    scanf("%d",&n);
    for (int i = 0; i < n; i++) {
        scanf("%d ",&arr[i]);
    }
    int ret = 0;
    int del = 0;
    scanf("%d",&del);
    for (int i = 0, j = 0; i < n; i++) {
        if (arr[i] != del) {
            temp[j] = arr[i];
            j++;
        }
        ret = j;
    }
    for (int i = 0; i < ret; i++) {
        printf("%d ",temp[i]);
    }

    return 0;
}
发表于 2023-11-16 10:45:05 回复(0)