生成数组C面试题精选
PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
1、腾讯面试题:给定一数组a[N],我们希望造构数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在造构过程当中,不允许应用除法:
要求O(1)空间复杂度和O(n)的时间复杂度;
除遍历计数器与a[N] b[N]外,可不应用新的量变(括包栈时临量变、堆空间和全局静态量变等);
实现序程(主流编程语言任选)实现并简略描述。
void main(void){
int a[5]={1,3,5,7,9};
int b[5];
int i;
b[0]=1;
for (i=1;i<5;i++){
b[i]=b[i-1]*a[i-1];
}
for(i=3;i>=0;i--){
b[0]*=a[i+1];
if(i==0)
break;
b[i]*=b[0];
}
for(i=0;i<5;i++){
printf("%d ",b[i]);
}
}
2、机随生成和为S的N个正整数——投影法
参考 http://blog.csdn.net/morewindows/article/details/8439393
设假生成和为20的4个正整数:
#include<time.h>
int sort(int *array,int len){
int i=0;
int j=0;
unsigned tmp;
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(array[j]>array[j+1]){
tmp = array[j];
array[j] = array[j+1];
array[j+1] =tmp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
int generate(){
int i=0,a[3],b[4];
srand((unsigned )time(NULL));
for(i=0;i<3;i++){
a[i]=rand()%20;
printf("%d ",a[i]);
}
printf("\n");
sort(a,3);
printf("///////\n");
b[0]=a[0];
printf("%d ",b[0]);
for(i=1;i<3;i++){
b[i]=a[i]-a[i-1];
printf("%d ",b[i]);
}
b[3]=20-a[2];
printf("%d ",b[3]);
printf("\n");
}
void main(){
generate();
}
文章结束给大家分享下程序员的一些笑话语录: 打赌
飞机上,一位工程师和一位程序员坐在一起。程序员问工程师是否乐意和他一起玩一种有趣的游戏。工程师想睡觉,于是他很有礼貌地拒绝了,转身要睡觉。程序员坚持要玩并解释说这是一个非常有趣的游戏:"我问你一个问题,如果你不知道答案,我付你5美元。然后你问我一个问题,如果我答不上来,我付你5美元。"然而,工程师又很有礼貌地拒绝了,又要去睡觉。 程序员这时有些着急了,他说:"好吧,如果你不知道答案,你付5美元;如果我不知道答案,我付50美元。"果然,这的确起了作用,工程师答应了。程序员就问:"从地球到月球有多远?"工程师一句话也没有说,给了程序员5美元。 现在轮到工程师了,他问程序员:"什么上山时有三条腿,下山却有四条腿?"程序员很吃惊地看着工程师,拿出他的便携式电脑,查找里面的资料,过了半个小时,他叫醒工程师并给了工程师50美元。工程师很礼貌地接过钱又要去睡觉。程序员有些恼怒,问:"那么答案是什么呢?"工程师什么也没有说,掏出钱包,拿出5美元给程序员,转身就去睡觉了。

浙公网安备 33010602011771号