关于头歌C/C++编程实训数组实训朋友圈点赞的一个题解

任务要求

实训描述

朋友圈有一个点赞功能,你可以为你喜欢的文章点赞表示支持。每篇文章都可以根据其内容给出一些标签,这些标签用数字表示(如:1 代表心灵鸡汤、2 代表政治、3 代表经济、…),你点赞的文章的类型,也间接反应了你的喜好。

本关任务:编写一个完整的程序,通过统计一个人点赞的纪录,分析这个人的喜好。

输入格式及编程要求

第一行输入一个正整数 N ( N < 1000 ),是该用户点赞的文章数量。

随后的 N 行,每行给出一篇被其点赞的文章的标签描述,格式为“k S1 S2 … Sk ”。

k表示该文章的标签数,1≤k≤10,即每篇文章最多10个标签;

Sk是标签,是1到1000之间的整数,即总共有不超过1000种标签。

所有数值之间以空格分隔。

例子

1. 4
2. 3 889 233 2
3. 5 100 3 233 2 73
4. 4 3 73 889 2 
5. 2 233 123

应输出结果为

233 3

基本思路

所用知识

1.数组

数组详情请见CSDN其他帖子或各类书籍

2.循环

循环方式详情请见CSDN其他帖子或者各类书籍

3.输入方式

同上


思路描述

首先,题目先给的输入是有几篇文章,即是告诉我们最开始对每篇文章获取其标签信息循环的多少。

而对于下面的每个输入行来说,其第一个为这篇文章的标签数,则可以告知我们在此嵌套循环中的循环最大值。


具体实现

为可以进行一一对应的处理,我们利用数组,对于二元数组或者是两个数组来说,其处理一般需要两个循环,对于初学者可能转不过来且麻烦,我们可以只用一个一元数组进行处理。


题目中提示我们,标签数不会超过1000,因此我们可以利用一个1001位(或更大些。但是注意小心溢出)的数组

int a[1010] = {0};

这里直接进行了一个初始化,为后续方便大小的比较;

而对于输入来说
先确定最外圈循环的次数,即是共点赞几篇文章

int n;
std::cin>>n;	//输入第一个数,即是阅读文章的数量
while(n--)
{
...
}

此处用n–递减进行循环,这里的每个循环内部应是对每篇文章的处理
再在此循环内添加输入并对文章的标签进行处理

while(n--)
    {
        cin>>x;
        for(i=0;i<x;i++)
        {
            cin>>t;
            a[t]++;
        }
    }

这里则是利用数组的索引作为每篇文章的标签对应的数字,然后利用其对应,每次索引到这位便可以+1

最后是用于检索全部文章得到数据后的一个找最多出现次数的历遍循环找出最大的。

for(i=0;i<1010;i++)
    {
        if(a[i]>=max)
        {
            lab=i;
            max = a[i];
        }
        
    }

需要注意的是

这里进行条件判断的时候要使用大于等于,由于题目要求是若是同一出现次数下,输出标签数字最大的,我们可以直接利用循环进行一个全部的比较。


写在最后

代码仍有不完整的地方,恳请各位大佬斧正,作为刚入C语言的小白,第一次发个帖也算是证明自己学有所成。


最后是完整代码

完整代码

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int n,x,i,lab,t;
    int max=0;
    int a[1010]={0};
    cin>>n;
    while(n--)
    {
        cin>>x;
        for(i=0;i<x;i++)
        {
            cin>>t;
            a[t]++;
        }
    }
    for(i=0;i<1010;i++)
    {
        if(a[i]>=max)
        {
            lab=i;
            max = a[i];
        }
    }
    printf("%d %d",lab,max);
    return 0;
}


  • 27
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
C++课后习题及答案 一、 选择填空 1. 下列各种高级语言中,( )是面向对象的程序设计语言。 A.BASIC; B.PASCAL; C.C++ D.Ada 2. 下列各种高级语言中,( )是最早提出了对象的概念。 A.Algol 60; B.Simula 67; C.Smalltalk; D.C++ 3. 下述面向对象抽象的原理中,( )是不对的。 A. 数据抽象; B. 行为共享; C.进化; D. 兼容; 4. ( )不是面向对象系统所包含的要数。 A. 重载; B. 对象; C. 类; D. 继承; 5. 关于C++C语言的关系的描述中,( )是错误的。 A. C语言C++一个子集; B. C语言C++是兼容的; C. C++C语言进行了一些改进; D. C++C语言都是面向对象的; 6. 下面关于对象概念的描述中,( )是错误的。 A.对象就是C语言中的结构变量; B.对象代表着正在创建的系统中的一个实体; C. 对象是一个状态和操作(或方法)的封装体; D.对象之间的信息传递是通过消息进行的; 7. 下面关于类概念的描述中,( )是错误的。 A.类是抽象数据类型的实现; B.类是具有共同行为的若干对象的统一描述体; C.类是创建对象的样板; D.类就是C语言中的结构类型; 8. C++C语言作了很多改进,下列描述中( )使得C语言发生了质变,即从面向过程变成为面向对象。 A.增加了一些新的运算符; B.允许函数重载,并允许设置缺省参数; C.规定函数说明必须用原型; D.引进了类和对象的概念; 9. 按照标识符的要求,( )符号不能组成标识符。 A.连接符; B. 下划线; C.大小写字母; D.数字字符; 10. 下列符号中,( )不可作为分隔符。 A.,; B.:;C.?; D.;
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值