/* 题目大意:Ignatius喝牛奶,给出一些牛奶的参数,从中选出性价比最高的牛奶。 喝牛奶的三个条件 1. 喝同一瓶牛奶不能超过5天 2.不喝200ml以下的 求最便宜的 ,若最便宜的不止一个,选最多的。 题目分析: Yili 10 500 --品牌、价格、容量 Yili 10 500 相当于每天5元 Mengniu 20 1000 相当于每天4元 由于一天要喝200ml,不够的扔掉,所以总量不足200ml的可以忽略不计。 以5天为期,过期扔掉,所以1000ml以上的统统是够喝5天。 总体思想就是按照性价比排序,这里的“性”就是可喝的天数,“价”就是价格,用结构体和快排就得。 */ # includestruct Milk { char brand[100]; int days; double price,volume,ratio; }m[10]; void sort(Milk * m, int num) { Milk temp; for(int i = 0; i < num-1; i++) { for(int j = 0; j < num-1; j++) { if(m[j].ratio > m[j+1].ratio) { temp = m[j+1]; m[j+1] = m[j]; m[j] = temp; }else if((m[j].ratio == m[j+1].ratio) && (m[j].volume > m[j+1].volume)) { temp = m[j+1]; m[j+1] = m[j]; m[j] = temp; } } } } int main(void) { int T,N,num; scanf("%d",&T); while(T--) { scanf("%d",&N); for(int i = 0; i < N; i++) { scanf("%s %lf %lf", m[i].brand, &m[i].price, &m[i].volume);//brand代表字符串的首地址,所以不需要& if(m[i].volume < 200) {i--; N--; continue;} m[i].days= (m[i].volume/200) > 5 ? 5 : m[i].volume/200; m[i].ratio = m[i].price/m[i].days; } sort(m, N); if(m[0].volume < 200) printf("\n"); else printf("%s\n",m[0].brand); } return 0; }