题目链接: L1-034 点赞 - 团体程序设计天梯赛-练习集 (pintia.cn)
目录:
目录:
题目要求:
输入格式:
输出格式:
输入样例:
输出样例:
思路:
代码:
测试结果:
题目要求:
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数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;
}