题目描述

Yuki最近迷上了一款叫作IDENTITY V(第五人格)的游戏,六一节快到了,游戏也推出了一个活动。在活动期间,使用不同的角色参与对战,根据玩家在该局游戏中的表现会给予该角色相应的演绎积分,当演绎积分到达2000时,可以兑换相应角色的动态头像。该游戏现有的典型角色如下:

Yuki十分想要得到动态头像,每个玩家只能获得一个角色的动态头像,如果某一角色的积分足够,他会立即兑换。请根据Yuki在活动期间的对战情况,看看Yuki能够得到哪个角色的头像。

输入

第一行输入一个数T(T≤7),表示Yuki玩这个游戏的天数。接下来是T组数据。

每组数据的第一行是一个整数n(n≤20),表示当天玩的局数,接下来是n行数据,每行数据中包含一个字符串s(长度不超过20)代表Yuki当局使用的角色和一个整数g(g<1000)表示Yuki获得的演绎值。

输出

如果Yuki能够获得某一角色的所有奖励,则将该角色输出;如果不能获得任何角色的奖励,则输出“NOTHING”(不包含引号)

样例输入

【测试样例1】
5
2
Doctor 500
Gardener 600
2
Doctor 500
Gardener 600
3
Machinist 600
Doctor 500
Machinist 800
1
Doctor 500
1
Machinist 800【测试样例2,请注意这一组的角色名称】
3
2
ZXY 900
YWH 500
1
CXW 400
1
WSY 600

样例输出

【测试样例1】
Doctor【测试样例2】
NOTHING

吐槽:这题真的真的出生啊!!!本人没玩过第五人格,不清楚它里面到底有哪些角色,我一遍把题目看下来后觉得它是挺简单的,但是交了好几次都是部分错误,后面终于发现题目给出的12个角色只是例子啊!!除了这12个之外还有无数个角色,也就是说,就算你输个shit进去并且达到2000积分的话,shit也是要输出的,真的是shit啊!!

上思路:

这边先定义3个数组,它们的作用已经在注释说明了。

char characters[100][20] = { 0 };//这是角色库
int Score[100] = { 0 };//这是每个角色对应获取的分数
char thefirst[1][20] = { 0 };//我将在这里存放第一个到达2000分的角色

然后每次输入角色名(c)和积分(score)时,先判断这个角色在角色库里面有没有存在。

char c[20] = { 0 };
int score;
scanf("%s %d", &c, &score);
int which = isbeing(c, role_count);
int isbeing(char* c, int role_count) {for (int i = 0; i < role_count; i++) {if (strcmp(characters[i], c) == 0)return i;//返回的i代表这是角色库里的第几个角色}return -1;
}//这个函数用来判断输入的角色在角色库中是否存在

这边是准备了一个isbeing函数,把输入的字符串(角色名字)和当前角色库里的角色数量(role_count初始化为0)传过去

通过for循环遍历查找被传过来的角色名字在角色库里有没有一样的,有就返回它的下标(这里是i),方便后面在Score(积分库)里计算对应的积分,因为这样积分库Score的下标和角色库characters的下标都是一一对应的。

显然,无论你第一个输入的角色是谁,它都在角色库里不存在,所以第一次一定返回-1(如果不存在的情况是返回0的话,这个0到底是代表角色库里的第一个角色呢,还是不存在呢?就混淆了,所以这里不存在必须是设计成返回-1的)

然后小小地提一嘴这个char* c,它是函数isbeing的形参,因为c是一个数组(我用来存放每次输入的角色名字,所以传参时c因为是数组名字也就是数组首元素地址,地址当然要用指针变量来接受,所以char* c是指向数组c首元素地址的指针,当然你要是不熟悉指针的话也可以写成char c[20],20是角色名限制的长度)。

①角色不存在的情况:

    else {//不在角色库:对应分数先加上,然后添加到角色库,role_count也就是角色数量加一Score[role_count] += score;strcpy(characters[role_count], c);role_count++;}

不存在的角色就添加到角色库里,并且对应的分数也要给加上,然后累计一下角色数量。

因为role_count是初始化成0的,所以第一个新角色放在角色库(characters)的第一个位置(因为下标为0),然后role_count++,所以下一个新角色就该放在角色库的第二个位置,以此类推,很符合预期也很方便吧!

这里的要点应该就是字符串拷贝了,字符串是不能简单地用“=”来赋给其它数组的!请用strcpy完成拷贝,因此还要注意引上头文件#include<string.h>

②角色存在的情况:

   if (which != -1) {//输入的角色已经在角色库:加上对应分数Score[which] += score;if (Score[which] >= 2000) {printf("%s", characters[which]);return 0;}}

存在就正常加上积分嘛,然后写个条件判断,当某个角色积分到2000档位了,立即输出这个角色名并结束程序,注意积分库Score的下标和角色库characters的下标都是一一对应的。

这里可能会产生的疑问是:一旦有角色达到2000积分档位就直接结束,这样可以吗?后面还有角色的积分不算了嘛?

我的回答是反正题目没有要求你计算各角色的总积分,早点结束早点省事吧,多少能降低一点程序的时间复杂度嘞。

完整代码:

#include <stdio.h>
#include <string.h>
char characters[100][20] = { 0 };//这是角色库
int Score[100] = { 0 };//这是每个角色对应获取的分数int isbeing(char* c, int role_count) {for (int i = 0; i < role_count; i++) {if (strcmp(characters[i], c) == 0)return i;//返回的i代表这是角色库里的第几个角色}return -1;
}//这个函数用来判断输入的角色在角色库中是否存在
int main()
{int i, j, role_count = 0;int T, n;scanf("%d", &T);for (i = 0; i < T; i++) {scanf("%d", &n);for (j = 0; j < n; j++){char c[20] = { 0 };int score;scanf("%s %d", &c, &score);int which = isbeing(c, role_count);if (which != -1) {//输入的角色已经在角色库:加上对应分数Score[which] += score;if (Score[which] >= 2000) {printf("%s", characters[which]);return 0;}}else {//不在角色库:对应分数先加上,然后添加到角色库,role_count也就是角色数量加一Score[role_count] += score;strcpy(characters[role_count], c);role_count++;}}}printf("NOTHING");return 0;
}

IDENTITY V(wlacm竞赛题)相关推荐

  1. 运行项目时出现警告:Mon Nov 15 20:49:25 CST 2021 WARN: Establishing SSL connection without server‘s identity v

    问题出现 Mon Dec 06 16:41:19 CST 2021 WARN: Establishing SSL connection without server's identity verifi ...

  2. 重读经典:完全解析特征学习大杀器ResNet

    作者丨刘昕宸@知乎 来源丨https://zhuanlan.zhihu.com/p/268308900 编辑丨极市平台 论文标题:Deep Residual Learning for Image Re ...

  3. 考研英语一2016年真题4篇阅读词汇句子积累(详细!!!)

    写在前面:本文是对2016年英语一考研真题4篇阅读的整理. 文章目录 2016年英语一真题 Text1 时尚界审美的变化 词汇积累 句子积累 Text2 英国乡村需要保护 词汇积累 句子积累 Text ...

  4. exchange命令整理

    setup /ps(setup /prepareschema) setup /p /on:wnt (setup /preparead /organizationname:wnt) setup /pre ...

  5. resnet过拟合_重读经典:完全解析特征学习大杀器ResNet

    公众号关注 "ML-CVer" 设为 "星标",DLCV消息即可送达! 作者丨刘昕宸@知乎来源丨https://zhuanlan.zhihu.com/p/268 ...

  6. 重读经典:完全解析特征学习大杀器 ResNet

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨刘昕宸@知乎 来源丨https://zhuanlan. ...

  7. Fabric1.4源码解析:Peer节点启动过程

    看一下Peer节点的启动过程,通常在Fabric网络中,Peer节点的启动方式有两种,通过Docker容器启动,或者是通过执行命令直接启动. 一般情况下,我们都是执行docker-compose -f ...

  8. storj主网挖矿指南

    前置条件:ceotos 7 ,硬盘大于550G,docker 注册你的认证token,https://registration.storj.io/ 输入邮箱后,将得到一串字符串 你的邮箱:1Avv1f ...

  9. CodeSign重签名

    摘要: 1.利用codesign重签名 2.利用xcode重签名 重签名的步骤 codesign重签名 1.利用pp助手下载越狱的微信ipa 2,下载后在解压缩,打开里面payload下的ipa包就是 ...

最新文章

  1. Linux系统火焰图
  2. VS 2019要来了,是时候了解一下C# 8.0新功能
  3. Excel中配置VBA的工作环境
  4. imagick用法!
  5. 机器学习里的kernel是指什么?
  6. [转]ubuntu apt错误解决办法
  7. 下周见!Redmi K50标准版配置细节曝光:骁龙870+67W快充
  8. 李晓枫:金融信息化发展和创新的三方面
  9. ArcGIS空间分析笔记(汤国安)
  10. 【UE4笔记】EventFunction事件和函数的区别
  11. leetcode刷题之x的算术平方根
  12. MDK5.30下载来了,含镜像下载地址,ARM同时带来Cortex-M55调试展示(2020-05-05)
  13. 【渝粤题库】广东开放大学 经济法实务 形成性考核
  14. Leetcode2169. 得到 0 的操作数
  15. 利用Python进行简单杜邦分析
  16. 8个好玩又实用的神奇网站,帮你打开新世界大门!
  17. Mybatis 之 foreach 批处理 map 中的键值 为list 的操作
  18. CAS - CentOS下部署CAS服务器及简单使用
  19. 计算机教室使用 灭火器,实验室灭火器的种类和使用方法
  20. c#窗体调查问卷_如何在Microsoft窗体中创建问卷

热门文章

  1. 冒泡排序算法(java)
  2. 嵌入式数据库-SQLite3的基本指令及用C语言操作数据库
  3. axios使用url传参
  4. 计算机英语 软件维护,PC Reviver
  5. 前后端分离后产生的跨域问题sessionid丢失,cookies无法写入等
  6. 计算100元换算成1元、5元、10元零钱有多少种可能?
  7. 【管理知多少】独立冲突之外,你做不到
  8. 西瓜书+南瓜书第1-2章
  9. java getopt_getopt() 函数
  10. node 使用 --use_strict