wonderful girl, you should call: Kulczynski.
Hint
In the first sample you are given four friends. Fedorov's phone book contains one taxi number and one pizza delivery number, Melnikov's phone book only has 3 numbers of girls, Rogulenko's one has 6 taxi numbers and one pizza delivery number, Kaluzhin's one contains 2taxi numbers and one pizza delivery number.
Thus, if you need to order a taxi, you should obviously call Rogulenko, if you need to order a pizza you should call anybody of the following: Rogulenko, Fedorov, Kaluzhin (each of them has one number). Melnikov has maximal number of phone numbers of girls.
这题的题目还是比较好的, 对结构体的掌握的要求挺高的。先讲下题意。
直接看一个案例。
4
2 Fedorov
22-22-22
98-76-54
3 Melnikov
75-19-09
23-45-67
99-99-98
7 Rogulenko
22-22-22
11-11-11
33-33-33
44-44-44
55-55-55
66-66-66
95-43-21
3 Kaluzhin
11-11-11
99-99-99
98-65-32
Output
If you want to call a taxi, you should call: Rogulenko.
If you want to order a pizza, you should call: Fedorov, Rogulenko, Kaluzhin.
If you want to go to a cafe with a wonderful girl, you should call: Melnikov.
看这个案例。4代表4个人。
然后再输入一个M 和名字。
M代表每个人有M个电话。
然后有一个规则。电话号码相等的有的士服务,电话号码降序排的有披萨服务。其他都是GIRL 服务。
然后输出是先的士,再披萨,然后女孩(服务人的名字)。规则是电话号码类型最多的输出。
比如Rogulenko有6个的士的号码,其他人就两个,一个甚至没有。所以的士只有Rogulenko。
看披萨的输出。除了Melnikov,每个人都有一个披萨的类型的电话(降序的号码),因为此时每个人拥有的相等,所以按顺序输出。(谁名字在前谁输出)。
满足以上规则之后。上代码吧。
#include
#include
#include
using namespace std; struct node { int di,pi,girl,haoma; //用来统计的士类型的号码几个,披萨类型的号码几个,女孩类型的号码几个。haoma代表名字顺序 char name[666]; //名字 } f[666]; bool cmp1(node a,node b) { if(a.di!=b.di) // 每个人的士号码的数量不等的话 return a.di>b.di; //降序排(因为大的先输出) return a.haoma
b.pi; return a.haoma
b.girl; return a.haoma
dh[1]&&dh[1]>dh[3]&&dh[3]>dh[4]&&dh[4]>dh[6]&&dh[6]>dh[7]) f[i].pi++; // 满足降序排的数字,披萨类型的号码数量加已。 else f[i].girl++;//其他全是女孩类型的号码 } } sort(f,f+n,cmp1); // 结构体排序 printf("If you want to call a taxi, you should call: %s",f[0].name); //第一个人的号码数量肯定最多,直接输出 for( i=1;i