Problem Description
bLue 最近准备买点东西,但是患有选择困难症的他不知道该如何选择了。
不过机智的 bLue 灵机一动,列出了所有待选商品的性能和价格,把他们按照性价比(性能/价格,按整除运算)从高到低排序,如果性价比相同则按照价格从低到高排序,以此来决定如何购买。可是 bLue 并不会排序,你能帮助他吗?
Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据:
- 第 1 行输入一个整数 n (1 <= n <= 1000),表示待选商品数量。
- 接下来 n 行,每行输入 3 个用空格隔开的值,分别表示商品的名称 s(字符串,长度不超过 20 且不含空格)、性能指数 pe (整数,1 <= pe <= 10^7) 和价格 pr (整数,1 <= pr <= 10^4)。
Output
对于每组数据,输出 n 行,每行为一个字符串,表示排序后的商品名称。
Example Input
4 Pen 50 1 Pencil 1 1 Notebook 100 3 Cup 20 20
Example Output
Pen Notebook Pencil Cup
Hint
示例数据中:
- Pen 的性价比为 50/1 = 50
- Pencil 的性价比为 1/1 = 1
- Notebook 的性价比为 100/3 = 33
- Cup 的性价比为 20/20 = 1
#include <stdio.h>
struct
{
char name[21];
int per;
int price;
int ra;
}t,thing[1000];
void main()
{
int n,i,j;
while(~ scanf("%d", &n))
{
for(i=0; i<n; i++)
{
scanf("%s %d %d", thing[i].name, &thing[i].per, &thing[i].price);
thing[i].ra = thing[i].per/thing[i].price;
}
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1-i; j++)
{
if((thing[j].ra < thing[j+1].ra) || (thing[j].ra==thing[j+1].ra && thing[j].price>thing[j+1].price))
{
t = thing[j];
thing[j] = thing[j+1];
thing[j+1] = t;
}
}
}
for(i=0; i<n; i++)
{
printf("%s\n", thing[i].name);
}
}
}
struct
{
char name[21];
int per;
int price;
int ra;
}t,thing[1000];
void main()
{
int n,i,j;
while(~ scanf("%d", &n))
{
for(i=0; i<n; i++)
{
scanf("%s %d %d", thing[i].name, &thing[i].per, &thing[i].price);
thing[i].ra = thing[i].per/thing[i].price;
}
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1-i; j++)
{
if((thing[j].ra < thing[j+1].ra) || (thing[j].ra==thing[j+1].ra && thing[j].price>thing[j+1].price))
{
t = thing[j];
thing[j] = thing[j+1];
thing[j+1] = t;
}
}
}
for(i=0; i<n; i++)
{
printf("%s\n", thing[i].name);
}
}
}