题目要求:
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯FK”,其中1≤K≤10,Fi(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。
输出格式:
统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。
输入样例:
4 3 889 233 2 5 100 3 233 2 73 4 3 73 889 2 2 233 123
输出样例:
233 3
思路:
这个程序是一个简单的计数程序,用于找出在给定的一系列数字中,哪个数字出现的次数最多,并输出这个数字以及它出现的次数。程序使用了一个大小为1001的数组来记录每个数字出现的次数,然后遍历这个数组找出出现次数最多的数字。
让我们逐步分析代码:
头文件、命名空间:这包括了几乎所有的标准库,并使用了 std 命名空间,定义一个常量N,值为1001,定义数组的最大长度。
#include <bits/stdc++.h> using namespace std;
主函数:这是程序的入口点。
int main() { .... }
声明变量:这里声明了四个整数变量:n用于存储输入的组数,idx是一个大小为1001的数组,用于存储数字0到1000出现的次数(初始化为0),max用于存储数字出现的最大次数(初始化为0),x用于临时存储输入的每个数字。
int n; int idx[1001] = {0}; int max = 0; int x;
* `n`:表示将要输入的组数。
* `idx[1001]`:一个数组,用于存储从0到1000的整数出现的次数。
* `max`:用于存储出现次数最多的次数。
* `x`:用于临时存储输入的整数。
输入组数:程序首先读入一个整数n,表示接下来有n组输入。如果n为0,则程序直接返回。
cin >> n; if(n == 0) return 0;
处理每组输入:这是一个while循环,用于处理n组输入。对于每一组输入,首先读入一个整数k,表示接下来要读入k个数字。然后,通过一个for循环读入这k个数字,并将每个数字x在idx数组中的对应位置加1,以记录这个数字出现的次数。
while(n--) { int k; cin >> k; for(int i = 0; i < k; i++) { cin >> x; idx[x] ++; } }
* 对于每组输入,首先读取一个整数 `k`,表示接下来要输入的整数数量。
* 然后,对于这 `k` 个整数,每个整数 `x` 被读取,并增加 `idx[x]` 的值,即增加 `x` 出现的次数。
找出出现次数最多的数字:这个for循环遍历idx数组,找出出现次数最多的数字以及这个数字出现的次数。t用于存储出现次数最多的数字,max用于存储这个数字出现的次数。
int t = 0; for(int i = 0; i < 1001; i++) { if(idx[i] >= max) { max = idx[i]; t = i; } }
* 遍历 `idx` 数组,找出出现次数最多的整数 `t` 和其出现次数 `max`。
输出结果:最后,程序输出出现次数最多的数字t以及这个数字出现的次数max。
cout << t << " " << max << endl;
注意:
- 这个程序只考虑了0到1000的整数。如果输入的整数超出了这个范围,程序可能不会正常工作。
- 数组 idx 的大小是固定的(1001),这意味着程序不能处理超过这个范围的整数。如果需要处理更大的整数,需要修改数组的大小或使用其他数据结构,如 unordered_map。
代码:
#include <bits/stdc++.h> using namespace std; int main() { int n; int idx[1001] = {0}; int max = 0; int x; cin >> n; if(n == 0) return 0; while(n--) { int k; cin >> k; for(int i = 0; i < k; i++) { cin >> x; idx[x] ++; } } int t = 0; for(int i = 0; i < 1001; i++) { if(idx[i] >= max) { max = idx[i]; t = i; } } cout << t << " " << max << endl; return 0; }
测试结果: