1、位操作Description假设你工作在一个 32 位的机器上,你需要将某一个外设寄存器的第 X 位设置成0(最低位为第 0 位,最高位为第 31 位),将第 Y 位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值 R,及X,Y,编程计算更改后的寄存器值 R。Input仅一行,包括 R,X,Y,以逗号“,“分隔,R 为 16 进制表示的 32 位整数,X,Y 在0-31 之间且 Y=3,(Y-X)的绝对值=3,保证两次置位不会重合Output更改后的寄存器值 R(16 进制输出)Sample Input12345678,0,3Sample Output123
2、4567c这个题目比较简单,主要就是计算一下,哪位该清零,哪位该置一,然后移位一下就 ok 了代码:#includeint main()int r,x,y;scanf(“%lx,%d,%d“,r |= 3(y-1);r r printf(“%lx“,r);*第二题:原文:http:/ 5 个字母替换(例如:消息原文中的每个字母 A 都分别替换成字母 F)。而你要获得消息原文,也就是要将这个过程反过来。 密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M 原文字母:V W X Y Z A B C D E F G H I J K L
3、 M N O P Q R S T U 注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。Input最多不超过 100 个数据集组成,每个数据集之间不会有空行,每个数据集由 3部分组成: 1. 起始行:START 2. 密码消息:由 1 到 200 个字符组成一行,表示凯撒发出的一条消息. 3. 结束行:END 在最后一个数据集之后,是另一行:ENDOFINPUTOutput每个数据集对应一行,是凯撒的原始消息。Sample InputSTARTNS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJ
4、XENDSTARTN BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJENDSTARTIFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJENDENDOFINPUTSample OutputIN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSESI WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND I
5、N ROMEDANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE这个题主要是两个地方,一个是字母的替换,另一个是接收每行的内容并辨识其性质(信息开始,信息结束,全部结束,正文)。没有什么太复杂的地方。代码:*第三题:原文:http:/ N 个小孩围成一圈,给他们从 1 开始依次编号,现指定从第 W 个开始报数,报到第 S 个时,该小孩出列,然后从下一个小孩开始报数,仍是报到 S 个出列,如此重复下去,直到所有的小孩都出列(总人数不足 S 个时将循环报数),求小孩出列的顺序。Input第一行输入小孩的人数 N(N=64) 接下来
6、每行输入一个小孩的名字(人名不超过 15 个字符) 最后一行输入 W,S (W N),用逗号“,“间隔Output按人名输出小孩按顺序出列的顺序,每行输出一个人名Sample Input5XiaomingXiaohuaXiaowangZhangsanLisi2,3Sample OutputZhangsanXiaohuaXiaomingXiaowangLisi这题是约瑟夫环问题,谭浩强那本 C 语言的课后题里就有。这道题只需要在这篇文章( 【09.12.08】约瑟夫环问题 C 语言编程)中的代码基础上稍作一点修改就可以了,这里就不再贴出了。*第四题:原文:http:/ 日期和时间。对于日期的常用
7、格式,在中国常采用格式的是“年年年年/月月/日日”或写为英语缩略表示的”yyyy/mm/dd”,此次编程大赛的启动日期 “2009/11/07”就是符合这种格式的一个日期,而北美所用的日期格式则为“月月/日日/年年年年”或”mm/dd/yyyy”,如将“2009 /11/07”改成这种格式,对应的则是”11/07/2009”。对于时间的格式,则常有 12 小时制和 24 小时制的表示方法,24 小时制用 0-24 来表 示一天中的 24小时,而 12 小时制只采用 1-12 表示小时,再加上 am/pm 来表示上午或下午,比如”17:30:00”是采用 24 小时制来表示时间,而 对应的 12
8、 小时制的表示方法是”05:30:00pm”。注意 12:00:00pm 表示中午 12 点,而 12:00:00am 表示凌晨 12 点。 对于给定的采用”yyyy/mm/dd”加 24 小时制(用短横线”-”连接)来表示日期和时间的字符串,请编程实现将其转换成”mm/dd/yyyy”加 12 小时制格式的字符串。Input第一行为一个整数 T(T=10),代表总共需要转换的时间日期字符串的数目。 接下来的总共 T 行,每行都是一个需要转换的时间日期字符串。Output分行输出转换之后的结果Sample Input22009/11/07-12:12:121970/01/01-00:01:01
9、Sample Output11/07/2009-12:12:12pm01/01/1970-12:01:01amHint注意中午和凌晨时间的特殊表示这个题目主要注意一下那个凌晨 12 点和中午 12 点的表示。编程方面,我的做法是把内容都接收下来之后,经 24/12 小时表示法转换、添加符号(- / am pm)后,再更换为题目要求的月日年顺序输出。代码:*字母旋转游戏Description给定两个整数 M,N,生成一个 M*N 的矩阵,矩阵中元素取值为 A 至 Z 的 26 个字母中的一个,A 在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过 26 时又从 A 开始填充。例如,当
10、M=5,N=8 时,矩阵中的内容如下: A B C D E F G HV W X Y Z A B IU J K L M N C JT I H G F E D KS R Q P O N M LInputM 为行数,N 为列数,其中 M,N 都为大于 0 的整数。Output分行输出相应的结果Sample Input4 9Sample OutputA B C D E F G H IV W X Y Z A B C JU J I H G F E D KT S R Q P O N M L这个题目感觉在这五个题中是有一点难度的。方法是按照如下图的顺序,依次填充数组元素,最后再输出该二维数组即可。代码:输出的时候要注意一下,根据 Sample Output 所示,每个元素前面有 3 个空格,如果不注意这个的话,评判系统会报错。