1 / 94
文档名称:

C语言竞赛题目大全.doc

格式:doc   大小:647KB   页数:94页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言竞赛题目大全.doc

上传人:bb21547 2021/4/11 文件大小:647 KB

下载得到文件列表

C语言竞赛题目大全.doc

相关文档

文档介绍

文档介绍:C语言竞赛题目大全
POWERED BY SYD168 2010年5月7日
问题:
假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。
输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:
Sample Input
,0,3
输出:
c
解题思路:
很简单的位操作,但是需要注意的是Y那里是 110,不能直接或上110,而是先两次SET,在CLR。
答案:
#include <>
#define CLR(r, x) r &= ~(1UL << x) //1UL 表示32位无符号数,将r的x位清零。
#define SET(r, y) r |= (1UL << y) //表示将r的y位置零
int main()
{
int r, x, y;
scanf("%x,%d,%d", &r, &x, &y);

CLR(r,x); //清除x位
SET(r,y); //置位y位
SET(r,y-1); //置位y-1位
CLR(r,y-2); //置位y-2位

printf("%x", r);
return 0;
}
破译密码
问题:
据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第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 M N O P Q R S T U
(注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)
输入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成:
起始行:START
密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息.
结束行:END
在最后一个数据集之后,是另一行:ENDOFINPUT。
输出:
每个数据集对应一行,是凯撒的原始消息。
Sample Input
START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
END
ENDOFINPUT
Sample Output
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE
解题思路
凯撒编码,判断字符是否是字母,并循环-5即可,记得要循环哦,非常简单的题目哦
答案:
#include <>
#include <>
#include <>
#define N 202

char str[N]={0};

int main()
{
char *p;

gets(str);
while( strcmp(str, "ENDOFINPUT") != 0 ) //当没遇到消息集的结尾时
{
if ( (strcmp(str, "ST