你认为复杂,是因为你不懂C++。人家用C++写,不违背题意吧,真纠结!
谢谢你对我那个程序错误的指出,无奈我不懂的 ------ 他的C++程序像答案的模样 本程序需要在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 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--;
}
}
} 风过无痕1989 发表于 2020-10-25 00:52
本程序需要在DEV_C++的菜单--->工具--->编译选项--->编译时加入命令前打勾,并在下面的加入框中加入:-std= ...
谢谢! shooan 发表于 2020-10-25 08:26
纯C语言写的,刚好之前在leetcode上面做过
谢谢 ! 纯C语言的程序,我上面那个就是呀 乐乐学编程 发表于 2020-10-25 08:42
谢谢 ! 纯C语言的程序,我上面那个就是呀
不客气
页:
1
[2]