C语言竞赛小题分析

问题1 : 单身狗的愤怒

题目描述

罩得住学长是工作室最帅的帅哥,所以集训的学妹都喜欢罩得住学长。但是工作室的其他学长很不爽。现在挑5个女生出来,如果女生喜欢罩得住学长就为1,不喜欢就是0。喜欢的人越多,学长们的仇恨值越高,请求出学长们的愤怒值。

输入

输入一个n,代表有n组数据。
只有每一行输入5个数字,由01构成,计算1的个数为学长们的愤怒值。

输出

输出求得的学长们的愤怒值。

样例输入

2

1 1 1 1 1

1 0 1 0 1

样例输出

5

3

分析:1.if用来判断当输入值为1时,累积学长的愤怒值,注意的是求完每组数值,输出累积值后,需要重新将累积值归零,否则将累积所有数值。

2.假设n为定义数据的组数,应当scanfn后,再输入数组名(即int b[n],否则在部分输入器中无法识别。因为当scanf完后,n为一个实数实为常量。

3.可以提前定义i,j的初值,也可以在for中定义初值,而不容易出错的是后者(别问为啥,李靖学姐会笑)。

  

 

 

 

 

 

 

 

 

 

问题2 : 属性测试

题目描述

 

女生是一种很奇怪的生物,对女生来说,没有什么是一支口红解决不了的问题。如果有,那就来一打。最近在网上看到一个小测试:你拥有几只口红?

0只————汉子

1支————女汉子(1~2)

3支————女屌丝(3~4)

5支————女人(5~9)

10支————女神(10~14)

15支————妖孽(15~19)

20支以上简直是人生巅峰。(20~100)

输入

 

第一行是一个整数N,表示测试数据的组数(N<10)。
每组测试数据占一行,由一个整数M组成(0<=M<=100)。

输出

 

对于每组输入数据,输出一行。

样例输入

4

1

2

15

50

样例输出

女汉子

女汉子

妖孽

你已走上人生巅峰!

 

 

 

分析:1.显然,同样需要注意的是无论是用string字符串定义,还是直接输出结果中的文字,都需要对应条件后输出(即if中的判断)。

     2.当使用while语句时,并不是i++,而是n--,其次while与do while不同,它不会先运行一次再判断是否循环。

      3.如果要用switch语句时,需要明白switch执行到一个符合条件的数据的时候就直接跳出当次循环了,或者直接放到case里。并且case相当于一个开关,并不能加入选择语句。

      4,3种方式的选择都可以,但是最简单的便是直接if

 

 

 

 

 

 

 

问题3 : 不喜欢的成语

题目描述

 

石头是一个大美女,她貌美如花,沉鱼落雁,羞花闭月,但是,人无完人,体无完肤,老天爷是公平的,虽然她长得

 很漂亮,但她智商并不高,所以她读了三年的五年级都没有升上六年级,所以她一直在留级,这天,她复习考试的时候

 ,看到一个成语,叫做“三五成群”,不知怎么地,我们的石头突然很恼怒,估计是想到自己读了三年的五年级了

吧,于是她哭着回家找妈妈,跟她妈说“妈咪妈咪,我很讨厌3和5这两个数字!!!”,所以她妈妈就为了她,想把

能被3和5整除的数给找出来。现在请你想想办法帮帮她妈妈。

输入

 

第一行输入一个数n(0<n<=10),表示有n组测试数据。后面的n行输入多组输入数据,每一行都是一个数字m(0<m<=100);

输出

 

每组输入数据的输出占一行,结果为从1开始到m的范围内,输出所有能被3或者5整除的整数(包括m);

样例输入

3

5

10

20

样例输出

3 5

3 5 6 9 10

3 5 6 9 10 12 15 18 20

 

 

 

 

 

分析:1.如图,当先int 数组名再scanf n时,就需要设置数组的大小,否则就会出错。

      2.当明确的是循环次数的设置和输入单组数据时所用的循环判断是不同的,不然你可以试试。

      3.根据题目可知,当选用或语句而非与语句。其次,判断应当放在循环语句中,因为每次都需要判断下一个数据是否为需要的。

 

 

 

 

 

问题4 : 裁员

题目描述

 

2008年股市跳楼经济萧条,国期良货公司不得不进行裁员。老总比较任性,裁员不看能力全靠心情,于是一场裁员游戏决定了公司员工的去留。

         游戏规则是这样的:公司员工排队成一列,老总报了一个数,在队列中该位置的员工就会被炒掉。

输入

输入一个数字代表几组数据,每组数据每行一串字符串(只包括数字和字母),一个数字(位置)。(字符串长度<=50)

输出

输出裁员后的队列字符串。

样例输入

2

qwertyuio 2

asdfgh 3

样例输出

qertyuio

asfgh

 

分析:1.此题既可以用字符串也可以用二维数组,但需要注意的是当使用字符串时,需要知道每个字符串后面会自动加上’\0’,字符位数变会+1。

      2.在二维数组当中,既然i作为行数循环,j作为列数循环,各自的循环也同样不同。

其次,既然是删除,最简单的便是让后一个数占据前一个数的位置,使后面的数都前移。

      3.如在定义 char s[n][50],时,便是根据题意字符串长度<=50而设定,这就告诉我们,题目同样隐藏着条件需要设定。

 

 

 

 

 

 

问题10 : 拯救从异世界回归的菜月昴

题目描述

 

突然被异世界召唤的少年菜月昴,一觉睡醒发现自己回到了现实世界,这就悲剧了,现在他有很多科作业要做,每一科老师都给了他作业的最后期限,如果他在最后期限内完不成老师布置的作业,老师会在这之后每一天扣他一个学分,直到他完成这门作业。要知道,他很多天没上课,老师给他布置了好多作业,作为他的朋友,菜月昴向你请求支援,你来帮他安排写作业的顺序使他学分扣得最少。

输入

 

输入数据首先包含一个整数T,表示测试数据的个数。
每组测试数据以N开头,表示作业的数量(1<=N<=20)。
接下来N行每行包含一个字符串S(科目的名称,最长不超过20个字符)和两个整数x(这门作业的期限),y(菜月昴需要多少天才能完成这门课)。(1<=x,y<=20)

输出

 

每组测试数据先输出一行为最少扣的分数(最少为0),然后给出做作业的顺序,若扣的最少分有多种顺序满足,输出字典序最小的那个。
(在第一组样例数据中,Computer->English->Math 和Computer->Math->English均减少2个学分,但是English字典序比Math字典序更小,所以我们选择第一个序列)

样例输入

2

3

Computer 2 2

Math 4 2

English 4 2

2

Math 3 12

Japanese 12 10

样例输出

2

Computer

English

Math

19

Japanese

Math

 

 

 

 

分享:1.此题需要感谢一位学姐,因为也只有这个学姐提供了代码和思路,其他的不懂跑哪里去了。

     2. 大致就是先定义出来一个 bool就是cmp,是课程作业先做哪一个的判定;再定义一个course的类型,里面存放一个字符串就是课程的名字,然后,作业期限,多少天能完成,time是这两个数的差,然后就是按照num数输入课程的a就是之前一起定义的。
   3.然后用的是C++的sort函数排序,后面就先把第一个要扣的学分和用的时间做出来,就是参数为0的时候,然后从第二个开始循环,判定要扣多少学分

     4.而如果用C语言改编时,需要注意的是sort函数在C语言是否可用,其次,该思考如何确定为题目中的扣学分最少的方法,其中的问题就是时间和学分双重判断,即循环时该如何设定变量。

    

 

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值