/*
int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A,int nSize),
使A把0移至后面,非0整数移至数组前面并保持有序(按原来顺序),返回值为原数据中第一个
元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
*/
#include <stdio.h>
#include <stdlib.h>
#define ARRAYSIZE 18
int Func(int *Input, int nSize);
int main (int argc, char **argv)
{
int ArrayInt[ARRAYSIZE] = {1,2,3,4,0,5,7,0,7,5,3,2,0,234,3,0,2,4};
printf("数组的原始值为:\n");
for (int i = 0; i < ARRAYSIZE; i++)
{
printf("%-4d", ArrayInt[i]);
}
printf("\n");
printf("第一个不为0的下标:%d\n", Func(ArrayInt, ARRAYSIZE));
printf("去掉0后的值:\n");
for (int i = 0 ; i < ARRAYSIZE; i ++)
{
if (0 != ArrayInt[i])
{
printf("%-4d", ArrayInt[i]);
}
}
printf("\n");
system("pause");
return 0;
}
int Func(int *Input, int nSize)
{
bool FlagFirstZero = false;
int FirstZeroIndex = 0;
int CountZero = 0;
for (int i = 0; i < nSize-1; i ++)
{
if (0 == Input[i] && !FlagFirstZero)
{
FirstZeroIndex = i;
FlagFirstZero = true;
}
if (0 == Input[i] && 0 == Input[i+1])
{
CountZero++;
}
else if (0 == Input[i] && 0 != Input[i+1])
{
Input[i-CountZero] = Input[i+1];
Input[i+1] = 0;
}
}
return FirstZeroIndex;
}
数组中包含若干个0,去掉0,且数组的顺序不变
最新推荐文章于 2022-09-28 16:06:12 发布