• 用C++实现:删除数组零元素


    问题描述:

    从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。

    输入格式:

    第一行输入一个整数,代表数组中有多少个数,第二行输入数组的元素。

    输出格式:

    第一行输出不为0的元素个数,第二行输出不为0的元素。

    测试样例1:

    输入:

    5

    3 4 0 0 2

    输出:

    3

    3 4 2(3 4 2是以空格隔开的3个数)

    测试样例2:

    输入:

    3

    0 0 0

    输出:

    0

    测试样例3:

    输入:

    7

    0 0 7 0 0 9 0

    输出:

    2

    7 9

    思路:直接对整个数组进行遍历,遇到0就把0后面的元素往前移,然后减少数组的元素个数。

    代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 int CompactIntegers(int *arr,int n)
     4 {
     5     //直接从头到尾遍历整个数组,是0就将n减1,同时数组下表往前移
     6     for (int i = 0; i < n; i++)
     7     {
     8         if (arr[i] == 0)
     9         {
    10             //将所有元素向前移
    11             int j = i;
    12             for (; j < n - 1; j++)
    13             {
    14                 arr[j] = arr[j + 1];
    15             }
    16             //将要判断的元素的下标前移
    17             i = i - 1;
    18             //非0元素个数减1
    19             n--;
    20         }
    21     }
    22     return n;
    23 }
    24 
    25 int main(void)
    26 {
    27     int n;
    28     cin >> n;
    29     int* arr = new int[n];
    30     for (int i = 0; i < n; i++)
    31     {
    32         cin >> arr[i];
    33     }
    34     int t = CompactIntegers(arr, n);
    35     cout << t << endl;
    36     if (t == 0)
    37     {
    38         return 0;
    39     }
    40     else
    41     {
    42         for (int i = 0; i < t - 1; i++)
    43         {
    44             cout << arr[i] << " ";
    45         }
    46         cout << arr[t - 1];
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    mysql远程执行sql脚本
    数据库死锁
    sqlserver 数据库之调优
    sqlserver 数据库之性能优化
    Session共享的解决办法
    关于对session机制的理解--通俗易懂
    kafka之常用命令
    分布式消息队列之kafka
    vuejs调试代码
    json
  • 原文地址:https://www.cnblogs.com/guanrongda-KaguraSakura/p/13583437.html
Copyright © 2020-2023  润新知