分享一道百度笔试程序题

来源:互联网 发布:php实现pdf在线阅读 编辑:程序博客网 时间:2024/05/17 01:47

有个朋友去百度面试,带回来一道笔试题,题目如下:
这里写图片描述
题目大意就是这样!

初步分析挺简单的嘛,不就是当收到的礼物超过K个时,接下来每次拿到手一个礼物之后,和手里的K个礼物做对比,淘汰K个里面比当前手里礼物价值低的里面的最低的一个!

不过,写的时候还是把自己绕沟里去了,修改了一次才成功。

下面是代码:

#include <stdio.h>#include <stdlib.h>#include <time.h>int n = 0;          //礼物总数int K = 0;          //要留下来的礼物数int num = 0;        //要留下来的礼物喜好值之和int * val = NULL;   //所有礼物喜好值数组指针int main(void){    int i,x,y,temp;    //输入礼物总数量    printf("present quantity(>0): ");    scanf("%d", &n);    printf("M will get present: n = %d !\n", n);     //输入要留下来的礼物数量    printf("leave quantity(>0 && <=n): ");    scanf("%d", &K);    printf("M will leave present: K = %d !\n\n", K);    //分配所有礼物喜好值数组内存空间,并初始化为0    val = (int *)calloc(n, sizeof(int));                        if(val == NULL)    {        printf("calloc failed!!!!!!\n");        return -1;    }    //初始化随机数种子    srand((unsigned)time(NULL));                                for(i = 0; i < n; i++)    {        //随机生成一个0~100的礼物喜好值        val[i] = (rand() % 100);                                    printf("%d present, val: %d \n", (i + 1), val[i]);        //如果收到的礼物数量还没有超过要留下来的礼物数量        if(i < K)               {            //那么喜好值之和就等于目前所有礼物喜好值之和            num += val[i];          }        //如果收到的礼物数量超过了要留下来的礼物数量        else            {            //对目前所有礼物按照从大到小喜好值排序            for(x = 0; x < (i + 1); x++)            {                for(y = (x + 1); y < (i + 1); y++)                {                    if(val[y] > val[x])                    {                        temp = val[y];                        val[y] = val[x];                        val[x] = temp;                    }                }            }            num = 0;    //重置喜好值之和            //打印排序结果,并计算目前要留下来的礼物喜好值之和            printf("now rank: ");            for(x = 0; x < (i + 1); x++)            {                if(x < K)   //只需要喜好值最大的 K 个礼物                {                    num += val[x];                }                printf("%d ", val[x]);            }            printf("\n");        }        //打印目前要留下来的礼物的喜好值之和        printf("leave present total val: num = %d \n\n", num);    }    free(val);      //释放礼物喜好值数组内存空间    val = NULL;    return 0;}

运行结果如下:
这里写图片描述

欢迎大家交流!!

原创粉丝点击