生成数组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美元给程序员,转身就去睡觉了。

你可能感兴趣的:(面试题)