您的位置:首页 > 编程语言 > C语言/C++

2009年湖南省冬季技能大赛试题

2013-05-30 22:56 239 查看
2009年湖南省冬季技能大赛试题Problem 1 谁是大家最喜爱的明星.
题目描述:
《造星花园》青春偶像派电视剧热播后,剧组中的各位明星来到“娱乐热土”之称的湖湘卫视参加“我选我喜欢”的与观众现场互动娱乐节目。现场的观众对明星们投票选出最受欢迎的明星。投票的方式是,每个观众只能投一票,观众喜欢某个明星或者觉得他在本轮的表现不错,就可以到台上将一支玫瑰花送给这个明星。所有的投票者投完票后,主持人根据每个明星手中的玫瑰朵数,宣布明星所得票数。
现在请你编程来统计每个选手得到的观众票数,并且输出哪个明星最受欢迎。
例如:4个观众给3个明星投票,第1个观众投给了1号明星,第2个观众投给了3号明星,第3个观众投给了1号明星,第4个观众投给了2号明星。
输入
第一行包含2个整数m,n(1<=m,n<=100),m表示投票人数,n表示明星的个数.其下的一行中包含m个整数ai(1<=ai<=n,1<=i<=m),表示投票人i将票投给了编号为ai的明星。
输出
输出的第一行为1到n 号明星各自的所得票数。输出的第二行为得票数最多的明星,如果有多个明星,则按明星编号从小到大排列。同行数据间用一个空格分隔。
输入示例
4313 1 2输出示例
21 11

Problem 2 黑色星期五
题目描述
13号又是星期五,是一个不寻常的日子吗?
13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13日落在星期一,星期二,……,星期日的次数。这个次数从1900年1月1日到1900+n-1年12月31日。n是一个非负整数且不大于400
这里有一些你要知道的:
1900年1月1日是星期一。
4,6,11和9月有30天。其他月份除了2月有31天。闰年2月有29天,平年2月有28天。
年份可以被4整除的为闰年(1992=4*498 所以1992年是闰年,但是1990年不是闰年)
以上规则不适合于世纪年。可以被400整除的世纪年为闰年,否则为平年。所以,
1700,1800,1900和2100年是平年,而2000年是闰年。

输入:
一个整数n.输出:
七个在一行,且用一个空格分开整数,它们代表13日是星期六,星期日,星期一,……,星期五的次数。
输入示例
20输出示例
36 33 34 33 35 35 34

Problem 3:狡兔三窟

题目描述
大家都知道狐狸很狡猾,但是狐狸想抓到兔子也没那么容易,以为它也有“狡兔三窟”的名声。下面就让我们来看看这场狐狸与兔子的角逐吧!
在某个山上有n个洞,住着一只狐狸和一只兔子,这n个洞呈圆形排例,分布在山的周围,每个洞之间有一定的距离。狐狸总想去捉吃兔子。有一天,兔子远远的看见了狐狸,便对狐狸说:“这样吧,我们玩个游戏,把n个洞依次编成1至n号,你住的洞编号为第n号洞,我藏在另外的某个洞里。你从自己的洞出发,沿着一个方向走,第一次走一个间隔(相邻的两个洞之间为一个间隔),进入1号洞寻找我,第二次走两个间隔,进3号洞寻找我,依此类推,次数不限,如果我被你找到了,我就甘愿成为你的美餐,如何?狐狸心想,不限次数,只要我努力找,总可以找到小白兔的。结果狐狸找啊找啊,找了三天三夜也没有找到小白兔。请你帮小白兔一个忙,如果给定洞的个数n,它应该躲在哪些洞里才是永远安全的。

输入
第一行包含一个整数k(1<=k<=100),表示测试用例的个数。其后的k行,每行表示一个测试用例。对每个测试用例,包含一个整数n(3<=n<=1000),表示洞的个数。

输出
请将安全的洞号从小到大依次输出,洞号之间用空格隔开,最后一个洞号之后没有空格但有回车。如果没有洞是安全的,则输出“no safe caves”。每个测试用例的输出各占一行。

输入示例
2
10
4
输出示例
2 4 7 9
No safe caves

Problem 4: 身份证升位
题目描述:
现在大家使用的身份证都是18位号码,其实就在几年前,身份证都是使用的15位号码。全中国十几亿人都要将15位的身份证号升至18位,工作量之大可想而知。现在假如你回到了身份证升位的时期,当地一个公安局想请你设计一款软件实现自动升位。
升位方法:将原十五位身份证出生年份由原来的2位升至4位(比如81升为1981,假设所有身份证的主人为1900-1999年出生)得到17位身份证码,再根据17位身份证码计算校验码,校验码加至号码尾即得18位身份证号码。
校验码是由十七位身份证码生成,生成的公式如下:
校验码公式:

………………………………..(1)
说明:i---表示号码字符从右至左包括校验码在内的位置序号;
ai--------表示第i位置上的号码数值;
Wi---------表示第i位置上的加权因子(其值已定),其数值依据公式


计算得出.其中mod表示取余运算.
以34052419800101001C为例,其中C为校验码,根据公式(1)进行计算:
V=(21+36+0+25+16+16+2+9+48+0+0+9+0+5+0+0+2)mod 11=2
然后根据计算的结果V,查下表得校验码,当C=10时,检验码为大写X.
校验码对应表
V的值
0
1
2
3
4
5
6
7
8
9
10
校验码C
1
0
X
9
8
7
6
5
4
3
2
查表V=2的校验码为X,所以18位号码为: 34052419800101001X
输入
第一行为一个整数n(0<n<=10000):接下来n行每行有一个15位身份证号;
输出
对于每个待升位的十五位身份证号输出其对应的十八位身份证号.
输入示例
3
340524800101001
430104891010253
430902871220803
输出示例
34052419800101001X
430104198910102530
430902198712208036

Problem 5: 哈夫曼编码
题目描述
在某通信系统中所使用的字符集是固定的,经过统计发现并非每个字符出现的概率都一样,有些字符的频率非常高,而有些字符的出现频率很低.如何才能使整体编码长度最短并且保证译码正确呢?Huffman编码就能解决这个问题.
现在请你编程,给定各个字符出现的次数,使用Huffman编码后,平均编码长度是多少.例如:通信系统中有8个字符,出现的次数分别是5,29,7,8,14,23,3,11.那么,其Huffman编码可以是如下形式:
字符出现次数编码编码长度
1 5 0110 4
2 29 10 2
3 7 1110 4
4 8 1111 4
5 14 110 3
6 23 00 2
7 3 0111 4
8 11 010 3
所以,平均编码长度=(5*4+29*2+7*4+8*4+14*3+23*2+3*4+11*3)/(5+29+7+8+14+23+3+11)=2.710000.
输入
第一行有一个整数K(1<=k<=100),表示测试用例的个数.每个测试用例的数据有2行,其中第一行有一个整数n(1<=n<=2000),表示通信系统的使用的字符个数.其后一行中包含n个整数ti(1<=ti<=2000),分别表示各个字符出现的次数.
输出
每个测试用例输出一行.输出平均编码长度.结果保留6位小数.
输入示例
4
8
529 7 814 23 3 118
5 5 5 5 5 5 5
8
1 2 3 4 5 6 7 8
16
287 301 176 76 74911 0 1 541 389 474 153 362 356 122 543
输出示例
2.710000
3.000000
2.833333
3.547236
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言