题目链接:
解题思路:
1. 在删除代码(核心代码)中,先要定义俩个局部变量 i 和 j
2. 其中 i 用来遍历整个数组,而 j 跟随 i 的步伐,
如果 i 遍历到这个数字不是要删除的数字,则要把这个数字放在变量 j 中,
所以这样随着 i 的遍历,在没有遇到指定数字前,j 的数值是不断在更新的
而当 i 在遍历的过程中遇到了要删除的指定数字时,
变量 j 就不要在随着 i 的遍历而更新数值,即变量 j 就停在指定数字的下面,
但是变量 i 仍然需要向后遍历,
只是当 i 走到指定删除数字的下一个数字时,就要把这个数字赋给变量 j ,
从而达到删除指定数字的目的
而当赋给变量 j 后,此时 j 就要向后++(即向后遍历一个数字)了
然后变量 i 再向后遍历一个数字,将这个数字赋给变量 j
最后 j 再向后遍历一个数字
总结:
变量 i 是用来遍历整个数组,而变量 j 是用作存放数据的位置
答案代码:
#include <stdio.h>
int main ()
{
int data = 0;
scanf("%d\n",&data);
int m = 0;
int arr[50] = {0};
for (m = 0;m < data;m++)
{
scanf("%d ",&arr[m]);//把输入的一行数字放入数组中
}
int delete = 0;
scanf("%d",&delete);//以上均为输入
int i = 0;
int j = 0;//因为j的值是上一次循环的结果,所以它不能放在循环内部
for (i = 0;i < data;i++)//用变量i来遍历整个数组
{
if (arr[i] != delete)
{
arr[j] = arr[i];
j++;
}
}
//此时的j就是删除数据后的元素个数
for (i = 0;i < j;i++) //输出最后的结果
{
printf("%d ",arr[i]);
}
return 0;
}