杭电--1009 C语言实现

思路:要用有限的猫粮得到最多的javabean,则在房间中得到的javabean比例应尽可能的大。

用一个结构体,保存每个房间中的javabean和猫粮比例和房间号,然后将结构体按比例排序,则从比例最大的房间开始交换javabean,即可得到最大值。



#include<stdio.h>
#include<stdlib.h>

typedef struct k_ {
    double k;//存储每个房间中javabean和猫粮的比例

    int x;//存储房间号

}K_;

int cmp(const void *a, const void *b) {
    return *(double *)a > *(double *)b ? -1 : 1;
}


int main() {
    int j[1000], f[1000], i;
    K_ k[1000];
    int m, n;
    double javabean;
    while (scanf("%d%d", &m, &n) != EOF && !(m == -1 && n == -1)) {
        javabean = 0;
        for (i = 0; i < n; i++) {
            scanf("%d%d", &j[i], &f[i]);
            k[i].k = (double)j[i] / f[i];
            k[i].x = i;
        }
        qsort(k, n, sizeof(k[0]), cmp);
        for (i = 0; i < n; i++) {
            if (m > f[k[i].x]) {
                javabean += j[k[i].x];
                m -= f[k[i].x];
            }
            else {
                javabean += ((double)j[k[i].x] * ((double)m / f[k[i].x]));
                break;
            }
        }
        printf("%.3lf\n", javabean);
    }
    return 0;
}

 

posted @ 2017-05-08 14:28  Carol淋  阅读(599)  评论(0编辑  收藏  举报