华为面试题
来源:互联网 发布:1号教室网络教师招聘 编辑:程序博客网 时间:2024/05/03 20:02
问题:
有一个数组A[nSize],其元素含有多个0,求一函数将所有的非零元素移到前面(不分大小,按原位置前移).并返回非零函数的个数i.
解决方法一:
int get(int *array,int nSize)
{
int temp = 0;
int zeroNum = 0;
for(int i = 0 ; i < nSize ; i ++)
{
if(array[i] != 0)
{
array[zeroNum] = array[i];
if(zeroNum != i)
array[i] = 0;
zeroNum++;
}
}
return zeroNum;
}
解决方法二:
// test060329_1.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define MAX_NUM 11
#define TAG INT_MAX
#define F1 1
#define F2 0
#define F3 0
#define F4 0
#define F5 0
#define F6 0
#if F1
int move(int array[], int nSize)//right
{
cout << "f1" << endl;
int temp = 0;
int zeroNum = 0;
int t=0;
for(int i = 0 ; i < nSize ; i ++)
{
if(array[i]==0 || array[i]==TAG)
{
zeroNum++;
for(int j=i+1; j<nSize; j++)
{
if(array[j]!=0 && array[j]!=TAG)
{
array[i] = array[j];
array[j] = TAG;
t++;
break;
}
}
}
}
for(i=0; i<nSize; i++)
{
if(array[i] == TAG)
array[i] = 0 ;
}
return zeroNum - t;
}
#elif F2
int move(int A[],int nSize)//wrong
{
cout << "f2" << endl;
int n,tem,i=0;
for(n=0;n<nSize;n++)
{
if(A[n]==0)
{
tem=A[n];
A[n]=A[n+1];
A[n+1]=tem;
i++;
}
}
return i;
}
#elif F3
int move(int *array,int nSize)//wrong
{
cout << "f3" << endl;
int temp = 0;
int zeroNum = 0;
for(int i = 0 ; i < nSize ; i ++)
{
if(array[i] != 0)
{
array[zeroNum] = array[i];
if(zeroNum != i)
array[i] = 0;
zeroNum++;
}
}
return zeroNum;
}
#elif F4
int move( int A[],int nSize )//fan le
{
cout << "f4" << endl;
return partition( A, A + nSize, bind1st( equal_to<int>(), 0 ) ) - A;
}
#elif F5
int move(int A[], int nSize)//return wrong
{
cout << "f5" << endl;
int i = 0;
int n;
for(n = 0; n < nSize; n++)
{
if(A[n] != 0)
{
A[i] = A[n];
A[n] = 0;
i++;
}
}
return i;
}
#elif F6
void moveAhead(int a[], int from, int size)//return wrong
{
int temp = a[from];
for( ;from < size; from++)
{
a[from]=a[from+1];
}
a[size-1] = temp;
}
int move(int a[], int size)
{
cout << "f6" << endl;
if(size == 0) return 0;
int noZero = 0;
for(int i= 0; i < size; i++)
{
if(a[i] == 0)
{
moveAhead(a,i,size);
size--;
--i;
}
else ++noZero;
}
return noZero;
}
#endif
int main(int argc, char* argv[])
{
int a[MAX_NUM] = {0,0,0,1,55,0,1,1,0,0,0};
for(int i=0; i<MAX_NUM; i++)
cout << a[i] << " ";
cout << endl;
int nZero = move(a,MAX_NUM);
cout << nZero << endl;
for(i=0; i<MAX_NUM; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
拷进vc运行便是,想运行哪个函数把
#define Fx x
后面的0改成1便是,其他都改0
- 华为java华为面试题
- 华为面试题
- 华为面试题(转载)
- 华为一道面试题
- JAVA华为面试题
- 华为面试题
- 华为面试题1
- 华为网络工程师面试题
- 华为面试题
- 华为面试题
- 华为面试题
- 华为面试题
- 华为面试题
- 华为面试题
- 一道华为面试题
- 华为面试题
- java华为面试题
- 华为面试题
- 心情1
- 一个合格程序员该做的事情——你做好了吗?
- 一些Asp技巧和实用解决方法
- 一个自动动态播放图片的类(downmoon)新增图片效果
- thinking in java 3 notes
- 华为面试题
- isql命令行方式执行脚本,脚本中不能有/**/的跨行注释
- 数据库设计范式深入浅出
- SQLServer和Oracle的常用函数对比
- 首都电子商务平台和软件环境的建设
- 导入EXCEL文件到SQL数据库
- ASP.NET中关于上传附件的大小设置问题
- 华为面试题
- 完整的中国