题目描述
幼儿园的老师给几位小朋友等量的长方体橡皮泥,但有个小朋友(小霸王)觉得自己的橡皮泥少了,就从另一个小朋友那里抢了一些。请问是哪个小朋友抢了哪个小朋友的橡皮泥?
输入
测试数据有多组。对于每组测试,首先输入一个正整数n(n≤500),然后输入n行,每行包括3个不超过1000的整数l、w、h和1个字符串name(不超过8个字符且不含空格),其中,l、w、h 分别表示橡皮泥的长、宽、高,name表示小朋友的姓名。当n等于-1时,输入结束。
输出
对于每组测试,按“name1 took clay from name2.”的格式输出一行,其中name1代表小霸王的名字,name2代表被抢小朋友的名字。
样例输入 Copy
3
10 10 2 Jill
5 3 10 Will
5 5 10 Bill
-1
样例输出 Copy
Bill took clay from Will.
源代码
#include <iostream>
#include <algorithm>
using namespace std;
struct children
{int a;int b;int c;int v;string name;
};
int cmp(const struct children &A,const struct children &B)
{return A.v>B.v;
}
int main()
{children a[1000];int n;while(cin>>n,n!=-1){for(int i = 1;i <= n;i ++ ){cin>>a[i].a>>a[i].b>>a[i].c>>a[i].name;a[i].v=a[i].a*a[i].b*a[i].c;} sort(a+1,a+1+n,cmp);//结构体按照橡皮泥的体积进行排序 cout<<a[1].name<<" took clay from "<<a[n].name<<'.'<<endl;}return 0;
}
解题思路
因众多小朋友当中只有两人进行了交互,所以必有一个增加一个减少,其余人橡皮泥的体积不变,
故对结构体进行按照橡皮泥体积大小升序排序之后,小霸王为橡皮泥最多的那个人,小怨种为橡皮泥最少的那个人