用c语言给定一个整数数组nums,将所有0移动到数组末尾,同时保持非0元素的相对顺序
#include <stdio.h>
void moveZeroes(int* nums, int numsSize);
int main()
{
int nums[] = {0, 1, 0, 3, 12};
int numsSize = sizeof(nums) / sizeof(nums[0]);
printf("原始数组:\n");
for (int i = 0; i < numsSize; i++) {
printf("%d ", nums[i]);
}
printf("\n");
moveZeroes(nums, numsSize);
printf("移动 0 后的数组:\n");
for (int i = 0; i < numsSize; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
void moveZeroes(int* nums, int numsSize) {
int i, j, temp;
for (i = 0, j = 0; i < numsSize; i++) {
if (nums[i] != 0) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
j++;
}
}
}
仅供参考
#include <stdio.h>
#define N 10
int main()
{
int arr[N] = { 0 }, t, i, j;
for (i = 0, j = 0; i < N; i++)
{
scanf("%d", &t);
if (t)
arr[j++] = t;
}
for (i = 0; i < N; i++)
printf("%d ", arr[i]);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:一、动态规划思想:若前一个元素大于0,那么将其加到当前元素上
#include <stdio.h>
int main()
{
int a[10],i,j=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
if(a[i] != 0)
a[j++] = a[i];
}
for(i=j;i<10;i++)
a[i] = 0;
for(i=0;i<10;i++)
printf("%d ",a[i]);
}