前言:本期是关于点赞的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗?
题目:
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数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
代码实现:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
int arr[1001] = { 0 };
for (i = 0; i < n; i++)
{
int k = 0;
scanf("%d", &k);
int j = 0;
for (j = 0; j < k; j++)
{
int tmp = 0;
scanf("%d", &tmp);
arr[tmp] += 1;
}
}
int max = arr[0];
int index = 0;
for (i = 1; i < 1001; i++)
{
if (arr[i] >= max)
{
max = arr[i];
index = i;
}
}
printf("%d %d", index, max);
return 0;
}
大致思路:
预备了解:
arr数组:存储每个特性标签编号出现的次数
tmp:存储每个特性标签的值
max:存储最常出现的特性标签
index:存储最常出现的特性标签的下标
代码解读:
part 1:统计每个特性标签的个数
int n = 0;
scanf("%d", &n);
int i = 0;
int arr[1001] = { 0 };
for (i = 0; i < n; i++)
{
int k = 0;
scanf("%d", &k);
int j = 0;
for (j = 0; j < k; j++)
{
int tmp = 0;
scanf("%d", &tmp);
arr[tmp] += 1;
}
}
第一个for循环用于实现输入的行数n
k:用于存储一篇文章的特性标签个数
将特性标签编号的数值作为arr数组的下标,对应唯一的空间,一个特性标签的编号出现一次,它作为下标所对应的空间内容+1
part 2: 找出最常出现的特性标签
int max = arr[0];
int index = 0;
for (i = 1; i < 1001; i++)
{
if (arr[i] >= max)
{
max = arr[i];
index = i;
}
}
printf("%d %d", index, max);
arr数组中的元素内容:代表某个特性标签出现的次数
arr数组中的下标:代表某个特性标签的编号
将数组中的第一个元素作为最常出现的特性标签,将它出现的次数存于max中,遍历整个arr数组,若是arr数组中的某个元素(代表一个特性标签出现的次数)大于max,则更新max的内容,并记录这个元素的下标
最后打印下标index和max