题目描述
在某网站收集了n个人的注册账号,账号类型有身份证号或者QQ号两种。
请编程用恰当的数据结构保存信息,并统计身份证中男性和女性的人数,以及QQ账号的平均值(取整)。
提示:身份证号码中倒数第二位若为奇数则表示男性,若为偶数则表示女性。
输入
第1行,一个正整数n,1≤n≤10000;
下面n行,每行一个字符和一个字符串。第一个字符表示账号类型,有i、q两种,第二个字符串是账号的信息。
输出
一行3个整数,分别代表男性人数、女性人数、QQ号平均值。
样例输入
6
i 522633200009118006
i 51170219990111195X
i 45102119800321935X
q 20081011
q 17254862
i 511702196505046283
样例输出
2 2 18667936
数据规模与约定
时间限制:1 s
内存限制:256 M
100% 的数据保证 1≤n≤10000
#include <iostream>
#include <cstring>
using namespace std;
union idtype {
char idcard[50];
long long qq;
};
struct person {
char flag;
union idtype id;
};
int main() {
person per[10005];
int n;
cin >> n;
int cntm = 0, cntw = 0, cntqq = 0;
long long sum = 0;
for (int i = 0; i < n; i++) {
cin >> per[i].flag;
switch (per[i].flag) {
case 'i': {
cin >> per[i].id.idcard;
break;
}
case 'q': {
cin >> per[i].id.qq;
}
}
}
for (int i = 0; i < n; i++) {
switch (per[i].flag) {
case 'i': {
int len = strlen(per[i].id.idcard);
if (per[i].id.idcard[len - 2] % 2) cntm++;
else cntw++;
break;
}
case 'q': {
sum += per[i].id.qq;
cntqq++;
}
}
}
cout << cntm << " " << cntw << " " << ((cntqq) ? sum / cntqq : 0 )<< endl;
return 0;
}