删除数列中的指定数(10分)

题目内容:

请使用指针的方法编写程序,程序的功能是先输入10个整数存储到数组a中,再输入一个指定的数x,把数组中的x数据删除掉,并保证数组中剩余的数还是连续存储的。

比如输入10个整数:3 2 8 6 5 8 7 9 8 5,存入数组,然后输入一个数8,把数组中的8全部删除。最后数组中剩下的数:3 2 6 5 7 9 5,在数组a中还是连续存储的。

要求定义函数实现删除功能:int del_num(int *p, int n, int x);其中函数的返回值为删除指定数后数组中剩余数据的个数。

输入格式:

输入10个整数,和1个指定数。

输出格式:

输出剩余数,以空格隔开,最后一个数后面没有空格。

输入样例:

3 2 8 6 5 8 7 9 8 5

8

输出样例:

3 2 6 5 7 9 5

供参考:

#include <stdio.h>
#define N 10
int del_num(int *p, int n, int x)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        if(p[i] == x)
        {
           for(j=i;j<n-1;j++)
               p[j] = p[j+1];
           n--;
           i--;
        }
    }
    return n;
}
int main()
{
    int a[N],n=N,i,x;

    for(i=0;i<n;i++)   //输入10个整数
        scanf("%d",&a[i]);
    scanf("%d",&x);    //输入整数 x

    n=del_num(a,n,x);

    for(i=0;i<n;i++)   //输出删除指定数后的数组
        printf("%c%d",i==0?'\r':' ',a[i]);

    return 0;
}

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[11],m,i;
    bool b[11];
    memset(b,true,sizeof(b));
    for(i=1;i<=10;i++)
    {
        cin>>a[i];
    }
    cin>>m;
    for(i=1;i<=10;i++)
    {
        if(a[i]==m)
            b[i]=false;
    }
    for(i=1;i<=10;i++)
    {
        if(b[i])
        {
            cout<<a[i];
            break;
        }
    }
    for(i++;i<=10;i++)
    {
        if(b[i])
        {
            cout<<' '<<a[i];
        }
    }
    cout<<endl;
    return 0;
}

这个借用一个外部数组来做,
new 一个和原数组同长度的数组。
依次拷贝数据到新数组,如果遇到X,则跳过,即得到删除X后的数组。
删除原数组元素,拷贝新数组到原数组中,返回数组元素个数。