杭电--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; }