求助一道题
有一个数组int A,要求写-一个函数:int * myfunc (int *p, int nSize);
将A中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。
例如:
A原来是: 1,0,3, 4, 0,-3, 5
经过myfunc处理后为: 1,3, 4,-3,5, 0,0 本帖最后由 liuzhengyuan 于 2020-5-3 17:31 编辑
定义一个整形变量 zero,它是储存 0 出现的次数
然后在建立一个数组,把 A 数组里的 0 除外的数存入 新的数组
然后在 新的数组的末尾 插入 zero 个 0。 liuzhengyuan 发表于 2020-5-3 17:25
定义一个整形变量 zero,它是储存 0 出现的次数
然后在建立一个数组,把 A 数组里的 0 除外的数存入 新 ...
具体代码怎么写呀 #include <stdio.h>
int * myfunc (int *p, int nSize);
int * myfunc (int *p, int nSize)
{
int i = 0;
while (1)
{
while ( *(p+i) != 0 && i< nSize)
{ // 寻找为0的下标
i ++;
}
if (i < nSize)
{
for (int j = i + 1; j < nSize; j++)
{
* (p+ j -1) = *(p+j);
}
*(p + nSize -1) = 0;
i++;
}
else
{
break;
}
}
return p ;
}
int main()
{
int A[] = { 1, 0, 3, 4, 0, -3, 5};
int nSize = sizeof(A)/sizeof(int);
int *p = myfunc(A, nSize);
for (int i=0; i<nSize; i++)
{
printf("%d", *(p+i) );
}
printf("\n");
return 0;
}
输出:
134-3500
根据前排大佬的想法,小萌新试着写了一个,有问题的地方请帮忙指正{:10_254:}{:5_92:}
#include<stdio.h>
int *myfunc(int *p,int nsize)
{
int i=0,j=0;
int count=0;
int temp;
for(i=0;i<nsize;i++)
{
if(*(p+i)!=0)
{
temp=*(p+i);
j++;
}
else
{
count++;
}
}
for(i=0;i<nsize-count;i++)
{
*(p+i)=temp;
}
for(i=nsize-count;i<nsize;i++)
{
*(p+i)=0;
}
return p;
}
int main()
{
int A={1,0,3,4,0,-3,5};
int nsize=7;
int i;
myfunc(A,7);
for(i=0;i<nsize;i++)
{
printf("%d ",A);
}
putchar('\n');
return 0;
}
页:
[1]