本文主要是介绍c 语言基础题目:L1-034 点赞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数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
解题思路:
- 定义变量和数组:你首先定义了一个整数
n
来记录特性标签的数量,然后定义了一个大小为1001的整数数组a
,所有元素初始化为0。数组的每个索引对应一个可能的特性标签,数组的值表示对应标签在数组中出现的次数。 - 读取输入:程序接下来读取特性标签的数量
n
,然后对于每个特性标签,程序读取一个数k
,表示该标签出现的次数。 - 更新数组:对于每个特性标签,程序会读取
k
个数字,并将这些数字对应的特性标签在数组a
中的值加1,表示这个标签出现的次数增加了。 - 查找最大值:在所有特性标签都被处理过后,程序开始查找数组
a
中出现次数最多的标签。你使用一个变量index
来记录当前找到的出现次数最多的标签,并在每次遇到新的更大值时更新这个变量。注意你的代码中用了小于等于<=
的条件来确保当出现次数相同时,选择小的标签。只需要保存最大的那个值就可以了。 - 输出结果:最后,程序打印出出现次数最多的标签的索引和它的出现次数。
程序源码:
#include<stdio.h> // 引入标准输入输出库,使得程序可以使用scanf和printf等函数 int main(){ // 主函数开始,程序从这里执行 int n,a[1001]={0};//定义a数组数组的元素下标与特性标签的号码一一对应 int i,j,k;//定义循环变量int index=0;//index用来记录已经查找过的标签出现次数最多的哪一项 // 定义整数n,用于存储特性标签的数量;定义一个大小为1001的数组a,并将其所有元素初始化为0。这个数组的每个索引i对应一个特性标签i,数组a中索引i的值表示特性标签i的出现次数 scanf("%d",&n); // 从标准输入读取一个整数并存储到变量n中,这个整数表示特性标签的数量 for(i=0;i<n;i++){ // 开始一个循环,对每个特性标签进行处理 scanf("%d",&k); // 从标准输入读取一个整数并存储到变量k中,这个整数表示当前特性标签的出现次数 for(j=0;j<k;j++){ // 开始另一个循环,对每个特性标签的出现次数进行处理 int num; scanf("%d",&num); // 从标准输入读取一个整数并存储到变量num中,这个整数表示当前特性标签的出现次数内的某一个数字 a[num]++; // 将数组a中对应数字num的元素加1,表示数字num出现了一次 } } // 定义一个整数index,并将其初始化为0。这个变量用于记录到目前为止出现次数最多的特性标签的索引 for(i=0;i<1001;i++){ // 开始一个循环,遍历数组a的所有元素 if(a[index]<=a[i]){//条件是小于等于以确保出现次数相同时小标签更新为大标签 // 如果当前元素的值小于等于当前最大的出现次数,那么更新index为当前元素的索引 index=i; } } printf("%d %d",index,a[index]); // 打印出现次数最多的特性标签的索引和它的出现次数 return 0; // 主函数结束,返回0表示程序正常退出
}
这篇关于c 语言基础题目:L1-034 点赞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!