给定一个整数数组nums,将所有0移动到数组的末尾,同时保持非零元素的相对顺序。

题目为:给定一个整数数组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;
}

以下内容部分参考ChatGPT模型:


思路:
可以使用双指针,一个指针记录当前非零元素应该存放的位置,另一个指针遍历数组。当遇到非零元素时,将其存放到第一个指针指向的位置,并将第一个指针向后移动一位。遍历完成后,将第一个指针后面的元素全部置为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;
}