题目描述:
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。
输入描述:
第一行输入一个整数(O<=N<=50)。第二行输入N个整数,输入用空格分隔的N个整数。
第三行输入想要进行删除的一个整数。
输出描述:
输出为一行,删除指定数字之后的序列。
具体实现:
#include <stdio.h>
int main()
{
int n = 0;
int arr[50] = {0};
int del = 0;
scanf("%d",&n); //第一行输入
int i = 0; //用于遍历数组里面的内容
int j = 0; //用于记录存放数据位置的下标
//第二行输入:读取N个数字
for (i = 0; i < n; i++)
{
scanf("%d",&arr[i]);
}
scanf("%d",&del); //第三行输入(用于读取要删除的数字)
//把数组中的元素遍历一遍,看看哪个是要删除的元素
for (i = 0; i < n; i++)
{
if (arr[i] != del)
{
arr[j++] = arr[i]; //把下标为i的元素放到下标为j的位置上
}
}
//输出删除后的元素
for (i = 0; i < j; i++) //此时的j已经是存放了已经删除了元素的数据
{
printf("%d " ,arr[i]);
}
printf("\n");
return 0;
}
输出结果:
总结:
思想就是:遍历数组的内容,多定义一个变量并作为数组的新下标。把不是我们要删除的元素放到新下标的位置,是我们要删除的元素就留在原地。这里的arr[j]与arr[i]其实操作的是同一块内存空间。
如图: