乐乐学编程 发表于 2020-10-23 16:48:24

xieglt 发表于 2020-10-23 09:39
你认为复杂,是因为你不懂C++。人家用C++写,不违背题意吧,真纠结!

谢谢你对我那个程序错误的指出,无奈我不懂的 ------ 他的C++程序像答案的模样

风过无痕1989 发表于 2020-10-25 00:52:50

本程序需要在DEV_C++的菜单--->工具--->编译选项--->编译时加入命令前打勾,并在下面的加入框中加入:-std=c++11


#include <iostream>
#include <iterator>
#include <algorithm>

void foo_c( int a[], size_t n )
{
    int* q = a;
    for( int *p=a; p!=a+n; ++p )
      if( *p != 0 )
            *q++ = *p;
    for( ; q!=a+n; ++q )
      *q = 0;
}

template<typename T,size_t N> void foo_cpp( T (&a) )
{
    std::stable_partition( a, a+N, [](T n){return n>0;} );
}

template<typename T,size_t N> void print( const T (&a) )
{
    std::copy( a, a+N, std::ostream_iterator<T>(std::cout," ") );
    std::cout << std::endl;
}

int main( void )
{
    {
      int nums[] = { 9,0,0,0,10,0,0,0,11,0,12,0,13,0,14,0,15,0,16,0 };
      foo_c( nums, sizeof(nums)/sizeof(*nums) );
      print( nums );
    }
}

shooan 发表于 2020-10-25 08:26:14

本帖最后由 shooan 于 2020-10-25 09:40 编辑

纯C语言写的,刚好之前在leetcode上面做过

void moveZeroes(int* nums, int numsSize){
    int p = numsSize-1;
    while (nums==0)      // 找到最后一个非零元素的下标
    {
      if (p == 0)
            return;
      --p;
    }

    int k = p;
    for (int i = k-1; i >= 0; i--)
    {
      if (nums==0)   // 找到最近的一个零元素的下标
      {
            int m = i;
            while (m < p)   // 把零往后面推
            {
                int t = nums;
                nums = nums;
                nums = t;
                m++;
            }
            p--;
      }
    }
}

乐乐学编程 发表于 2020-10-25 08:41:43

风过无痕1989 发表于 2020-10-25 00:52
本程序需要在DEV_C++的菜单--->工具--->编译选项--->编译时加入命令前打勾,并在下面的加入框中加入:-std= ...

谢谢!

乐乐学编程 发表于 2020-10-25 08:42:47

shooan 发表于 2020-10-25 08:26
纯C语言写的,刚好之前在leetcode上面做过

谢谢 ! 纯C语言的程序,我上面那个就是呀

shooan 发表于 2020-10-25 09:32:08

乐乐学编程 发表于 2020-10-25 08:42
谢谢 ! 纯C语言的程序,我上面那个就是呀

不客气
页: 1 [2]
查看完整版本: C语言越学越不懂了,请教