牛客网——序列中删除指定数字

 活动地址:CSDN21天学习挑战赛

目录

前言

一、序列中删除指定数字

二、解题步骤

1.分析问题

2.错误代码如下

3、修改之后:

总结


前言

今天笔者学了有序序列插入一个数组,和各位分享一下。


一、序列中删除指定数字

题目来源:

序列中删除指定数字_牛客题霸_牛客网

二、解题步骤

1.分析问题

本道题主要是在一个有序序列里删去一个指定数字,这就要我们去比对了。

2.错误代码如下

我最开始的思路:
我想先顺序查找,找到一样的了交换到下一位,最后输出的时候我输出少一位把最后那个给去掉
 

#include<stdio.h>
int main(){
    int n=0,a=0,b=0;
    int arr[51]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d ",&arr[i]);  //循环输入构成数组
    }
    scanf("%d",&a);
    for(int j=0;j<n;j++){
        if(a==arr[j]){        //找出输入整数a的位置
            b=arr[j];         //接下来的步骤是交换位置   
            arr[j]=arr[j+1];
            arr[j+1]=b;
        }
    }
        for(int k=0;k<n-1;k++){        //n-1是为了少输出一位,达到删去效果
            printf("%d ",arr[k]);
        }
    return 0;
}

以上就是我自以为完美的过程。

但是它有一个问题:

 

它只能去掉一个需要去掉的数字!!只能比对一个!

因为我们只抓住了第一个就有放开,一直抓着它往后面推,其他的不管一不一样都不管了。

3、修改之后:

其实很简单。

#include<stdio.h>
int main(){
    int n=0,a=0,b=0;
    int arr[51]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d ",&arr[i]);
    }
    scanf("%d",&a);
    for(int j=0;j<n;j++){
        if(arr[j]!=a)        //一个不等于就输出一个,等于就,不输出直接略过
        printf("%d ",arr[j]);
    }
    return 0;
}

 

 

总结

以上就是今天要讲的内容,本文仅仅简单介绍了删除数组中具体数字的方法,如有错误欢迎指正。