题目为:给定一个整数数组nums,将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
输入一些整数后,没有输出。(不用指针)
#include
int main()
{int nums[100];
int i,j=0,j1,a;
for(i=0;i<100;i++)
{scanf("%d",&nums[i]);
}
a=i;
for(i=0;i<100;i++)
{if(nums[i]!=0&&nums[i]!='\0')
{nums[j]=nums[i];
j++;
}
}
j1=j;
for(j=j1;j<=a;j++)
{nums[j]=0;
}
for(j=0;j<=a;j++)
printf("%d",nums[j]);
}
i < 100 你要输入100个数才行
#include <stdio.h>
int main()
{
int nums[100];
int i, j = 0, a;
for (i = 0; i < 100; i++)
{
scanf("%d", &nums[i]);
if (nums[i] == 0)
break;
}
a = i;
for (i = 0; i < a; i++)
{
if (nums[i] != 0)
{
nums[j] = nums[i];
j++;
}
}
for (; j < a; j++)
{
nums[j] = 0;
}
for (j = 0; j < a; j++)
printf("%d ", nums[j]);
return 0;
}
思路:
可以使用双指针,一个指针记录当前非零元素应该存放的位置,另一个指针遍历数组。当遇到非零元素时,将其存放到第一个指针指向的位置,并将第一个指针向后移动一位。遍历完成后,将第一个指针后面的元素全部置为0即可。
示例代码:
#include <stdio.h>
int main()
{
int nums[100];
int i, j = 0, n;
printf("请输入数组元素个数:");
scanf("%d", &n);
printf("请输入数组元素:");
for (i = 0; i < n; i++)
scanf("%d", &nums[i]);
for (i = 0; i < n; i++)
{
if (nums[i] != 0)
{
nums[j] = nums[i];
j++;
}
}
while (j < n)
{
nums[j] = 0;
j++;
}
printf("移动后的数组为:");
for (i = 0; i < n; i++)
printf("%d ", nums[i]);
return 0;
}
供参考:
#include <stdio.h>
int main()
{
int arr[100] = {0,1,0,0,12},n = 5;
//scanf("%d", &n); //输入数组大小 n
//for (int i = 0; i < n; i++) //输入各元素
// scanf("%d", &arr[i]);
for (int i = 0,j = 0; i < n; i++)
{
if (arr[i] != 0){//当前元素!=0,就把其交换到左边,等于0的交换到右边
int temp = arr[i];
arr[i] = arr[j];
arr[j++] = temp;
}
}
for (int i = 0; i < n; i++) //输出
printf("%d ", arr[i]);
return 0;
}