第二届周立功杯C语言与嵌入式设计大赛C语言竞赛组第一阶段题目.docx
《第二届周立功杯C语言与嵌入式设计大赛C语言竞赛组第一阶段题目.docx》由会员分享,可在线阅读,更多相关《第二届周立功杯C语言与嵌入式设计大赛C语言竞赛组第一阶段题目.docx(8页珍藏版)》请在冰豆网上搜索。
![第二届周立功杯C语言与嵌入式设计大赛C语言竞赛组第一阶段题目.docx](https://file1.bdocx.com/fileroot1/2022-11/30/cd634923-0924-4b53-914e-398790b0377b/cd634923-0924-4b53-914e-398790b0377b1.gif)
第二届周立功杯C语言与嵌入式设计大赛C语言竞赛组第一阶段题目
第二届周立功杯C语言与嵌入式设计大赛
C语言竞赛组第一阶段题目
比赛时间:
2009-5-12到2009-5-27日
比赛形式:
竞赛选手在比赛时间内,完成10道算法设计题
程序设计语言:
C/C++语言
程序代码要求:
对每个函数进行注释(在函数之前),说明函数的作用,对主要算法代码进行注释。
程序编码风格参见"CodingStyle.doc"。
程序中,涉及到对文件的操作可以使用fopen,fscanf,fprintf等函数实现。
说明:
算法设计题目总共10道,不要求全做。
对于每道题目,选手应该完成中题目中的要求,扩展要求或者选做部分也会展一定的分值。
代码风格,注释等也会影响得分。
2009-05-09
题目一:
(7分)
1.问题描述
正整数x的约数是能整除x的正整数。
正整数x的约数个数记为div(x)。
例如,1,2,5,10都是正整数10的约数,且div(10)=4。
设a和b是2个正整数,a≤b,找出a和b之间约数个数最多的数x。
2.要求:
对于给定的2个正整数a≤b,编程计算a和b之间约数个数最多的数。
3.输入:
输入数据由文件名为div.in的文本文件提供。
文件的第1行有2个正整数a和b。
4.输出:
程序运行结束时,若找到的a和b之间约数个数最多的数是x,将div(x)输出到文件div.out中。
5.输入输出文件样例:
div.in
div.out
136
9
题目二:
(7分)
1.问题描述:
给定一个整数序列,求出子段序列的最大和,也就是一段连续和元素的和,使其和最大,(如果和为负数则返回0)。
2.要求:
对于给定的n个数字的序列,编程计算最大子段和。
3.输入:
由文件num.in给出输入数据。
文件第一行为n,第二行为n个整数序列。
4.输出:
将编程计算出的最大子段和输出到文件num.out。
5.输入输出文件样例:
num.in
num.out
9
34-3-68-34-2-3
9
题目三:
(9分)
1.问题描述
实现将N进制到M进制数的转换(1对于11到36进制数,其基数使用从A到Z的英文字母(全部为大写)代替。
例如对于11进制,其基数10(十进制)使用"A"表示;对于36进制,其基数35(十进制)使用"Z"表示。
被转换的数全部为正数且小于2147483647(long型的最大值)。
下表为十进制数100对应的各进制数:
进制
10
11
16
27
35
数值
100
91
64
3J
2U
2.要求:
(1).实现10进制数到M进制数的转换。
(2).程序具有较强的容错能力(例如对错误的输入数字串的处理)。
(3).N进制到M进制数(13.输入:
输入文件名为convert.in,文件内容格式为第一列为被转换数的进制数,第二列为被转换数,第三列为转换后的进制。
这三列内容均为字符串形式。
每列之间使用一个空格隔开。
4.输出:
输出文件名为convert.out,文件内容为转换后的数。
对于一切错误,则输出“error”字符串。
5.输入输出文件样例:
样例1
convert.in
convert.out
1010027
3J
样例2
convert.in
convert.out
314027
error
题目四:
(9分)
1.问题描述:
大于1的正整数n可以分解为:
n=x1*x2*…*xm。
例如,当n=12时,共有8种不同的分解式:
12=12;
12=6*2;
12=4*3;
12=3*4;
12=3*2*2;
12=2*6;
12=2*3*2;
12=2*2*3。
2.要求:
对于给定的正整数n,编程计算n共有多少种不同的分解式。
3.输入:
由文件count.in给出输入数据。
第一行有1个正整数n(1≤n≤2000000000)。
4.输出:
将计算出的不同的分解式数输出到文件count.out。
5.输入输出文件样例:
count.in
count.out
12
8
题目五:
(9分)
1.问题描述:
设有n个顾客同时等待一项服务。
顾客i需要的服务时间为ti(1≤i≤n)。
应如何安排n个顾客的服务次序才能使平均等待时间达到最小?
平均等待时间是n个顾客等待服务时间的总和除以n。
2.要求:
对于给定的n个顾客需要的服务时间,编程计算最优服务次序。
3.输入:
由文件service.in给出输入数据。
第一行是正整数n,表示有n个顾客。
接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。
4.输出:
将编程计算出的最小平均等待时间输出到文件service.out。
5.输入输出文件样例:
service.in
service.out
10
56121991000234335599812
532.00
题目六:
(9分)
1.问题描述:
在实际应用中,常常会出现对两个大数进行操作的情况,比如对其进行加减运算。
请设计一个算法实现对两个大数m和n的运算(m和n的位数不大于128位)。
2.要求:
(1).实现对两个大数的相加运算。
(2).实现对两个大数的相减运算(扩展要求)。
3.输入:
输入文件名为ogol.in,文件内容有两列,分别为两个大数。
4.输出:
输出文件名为ogol.out,文件内容有两行,第一行为两个大数的和,第二行为两个大数的差(如果没有实现两个大数相减,则此行没有)。
5.输入输出文件样例:
ogol.in
ogol.out
99999999999999999991
10000000000000000000
题目七:
(11分)
1.问题描述:
设有n件工作分配给n个人。
将工作i分配给第j个人所需的费用为cij。
试设计一个算法,为每一个人都分配1件不同的工作,并使总费用达到最小。
2.要求:
设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。
3.输入:
由文件work.in给出输入数据。
第一行有1个正整数n(1≤n≤20)。
接下来的n行,每行n个数,表示工作费用。
4.输出:
将计算出的最小总费用输出到文件work.out。
5.输入输出文件样例:
work.in
work.out
3
1023
234
345
9
题目八:
(11分)
1.问题描述:
对一个序列进行的“无序”测量指的是:
计算出序列中未按照字母顺序进行排列的字母对的个数。
举例来说,在字母序列“DAABEC”中,经过“无序”测量的值是5,因为字母D比它右边的4个字母(A,A,B,C)大,而字母E比它右边的1个字母(C)要大,所以本字符序列中的倒置的无序字符对个数为5。
而这种测量值被称作——序列倒置对个数。
序列“AACEDGG”仅有一对倒置(E和D)——它差不多已经按序排列了——然而序列“ZWQM”有六对倒置(它是毫无秩序的——完全的颠倒秩序)。
2.要求:
编一个针对“DNA链序列”的目录(序列中只能包含A,C,G,T四个字母),依据每个序列中倒置对的个数,从“倒置对数”最少的到“倒置对数”最多的序列,依次编排目录,要求所有的字符串序列的长度相同。
3.输入:
第一行包含两个整数,一个正整数n(0下面的输入由m行组成,每行为一个长度为n的字符串。
4.输出:
输出已输入字符串的列表,从“最多排序数”到“最少排序数”依次安排,因为两个字符串可能会有相同的排序数,所以他们的输出依照最初的排列顺序进行。
5.输入输出文件样例:
dna.in
dna.out
106
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA
题目九:
(12分)
1.问题描述:
8x8的国际象棋棋盘上的一匹马,恰好走过出起点外的其他63个位置各一次,最后回到起点。
这条路线称为一条马的Hamilton周游路线。
2.要求:
对于给定的mxn的国际象棋棋盘,m和n均为大于5的偶数,且|m-n|<=2。
编程找出一条马的Hamilton周游路线。
3.输入:
输入数据由文件名为hamilton.in的文本文件提供。
文件的第1行是2个正整数m和n。
第二行为马的初始坐标编号(坐标原点:
为"0",左下角)。
4.输出:
输出文件名为hamilton.out,文件内容为马走过的路线,其中第一个为起始位置,依次为第二,第三个位置,每行最多8个数据。
例如对于8x8棋盘,对其规定如下:
每个位置使用一个数字代表,左下角为起始编号,从0开始。
56
57
58
59
60
60
60
63
48
49
50
51
52
53
54
55
40
41
42
43
44
45
46
47
32
33
34
35
36
37
38
39
24
25
26
27
28
29
30
31
16
17
18
19
20
21
22
23
8
9
10
11
12
13
14
15
0
1
2
3
4
5
6
7
5.输入输出文件样例:
hamilton.in
hamilton.out
88
0
0104133121623
2912…
题目十:
(16分)
系统用户管理是许多应用软件里不可缺少的部分,请使用C语言为某软件开发一个简单的用户管理子系统,具体功能要求如下:
(1). 添加新用户
在系统中为新用户创建一个访问系统的帐户,其中用户名的长度限制在1~6个字符之间且不区分大小写;用户密码的长度限制在6~10个字符之间,注意密码区分大小写。
在输入新用户名时,需要判定输入的用户名是否已经存在,若已经存在则提示用户重新输入;在输入用户密码时,需要分别输入“用户密码”和“确认密码”,若两者不一致则提示用户并让用户全部重新输入;用户在输入密码时,不允许直接在屏幕上显示用户键盘敲入的字符,必须用“*”号代替(下面输入密码时,与此要求相同);系统中所有用户的帐户存储在一个数据文件里。
(2). 系统登录
在用户登录时对用户身份进行确认。
当输入了用户名和密码后,判断输入的用户是否存在且密码相同,若用户合法,则提示“登陆成功”;否则,提示“用户名或密码错误”,让用户重新输入;注意,只允许用户尝试3次,超过3次则显示“非法用户”并退出模块。
(3). 密码修改
在修改用户密码时,需要输入用户名和原始密码,以及新密码和确认密码;当用户名和原始密码正确以及新密码和确认密码一致时,更新用户的密码,否则提示用户错误原因,即“用户名或密码错误”或“新密码和确认密码不一致”。
(4). 用户查询
为用户管理提供模糊查询功能。
当输入检索词后,查询出所有用户名中包含该检索词的用户。
例如:
假设当前系统中包含的用户包括abc,bab,cab,cba,如果用户输入的检索词是ab或AB,则检索出来的用户应该包括abc、bab和cab。
为了验证上述模块是否开发正确,可在main函数中编写一个菜单完成对上述功能模块的选择调用。
另外,以上任务在字符模式底下完成就可以了,不需要采用图形界面模式。