C语言竞赛题30题.docx

上传人:b****8 文档编号:10121477 上传时间:2023-02-08 格式:DOCX 页数:19 大小:26.79KB
下载 相关 举报
C语言竞赛题30题.docx_第1页
第1页 / 共19页
C语言竞赛题30题.docx_第2页
第2页 / 共19页
C语言竞赛题30题.docx_第3页
第3页 / 共19页
C语言竞赛题30题.docx_第4页
第4页 / 共19页
C语言竞赛题30题.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言竞赛题30题.docx

《C语言竞赛题30题.docx》由会员分享,可在线阅读,更多相关《C语言竞赛题30题.docx(19页珍藏版)》请在冰豆网上搜索。

C语言竞赛题30题.docx

C语言竞赛题30题

41.哪个大夫哪天值班

医院有A、B、C、D、E、F、G七位大夫,在一星期内(星期一至星期天)每人要轮流值班一天。

现在已知:

A大夫比C大夫晚一天值班;

D大夫比E大夫晚二天值班;

B大夫比G大夫早三天值班;

F大夫的值班日在B和C大夫的中间,且是星期四;

请确定每天究竟是哪位大夫值班?

*问题分析与算法设计

由题目可推出如下已知条件:

*F是星期四值班;

*B值班的日期在星期一至星期三,且三天后是G值班;

*C值班的日期在星期五至星期六,且一天后是A值班;

*E两天后是D值班;E值班的日期只能在星期一至星期三;

在编程时用数组元素的下标1到7表示星期一到星期天,用数组元素的值分别表示A~F七位大夫。

-------------------------------------------------------

42.区分旅客国籍

在一个旅馆中住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。

他们的名字叫A、B、C、D、E和F。

名字的顺序与上面的国籍不一定是相互对应的。

现在已知:

1)A美国人是医生。

2)E和俄罗斯人是技师。

3)C和德国人是技师。

4)B和F曾经当过兵,而德国人从未参过军。

5)法国人比A年龄大;意大利人比C年龄大。

6)B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假。

试问由上述已知条件,A、B、C、D、E和F各是哪国人?

*问题分析与算法设计

首先进行题目分析,尽可能利用已知条件,确定谁不是哪国人。

由:

1)2)3)可知:

A不是美国人,E不是俄罗斯人,C不是德国人。

另外因为A与德国人的职业不同,E与美、德人的职业不同,C与美、俄人的职业不同,故A不是俄罗斯人或德国人,E不是美国人或德国人,C不是美国人或俄罗斯人。

由4)和5)可知B和F不是德国人,A不是法国人,C不是意大利人。

由6)可知B不是美国人,也不是法国人(因B与法国人下周的旅行地点不同);C不是法国人。

将以上结果汇总可以得到下列条件矩阵:

.美(医生)英法德(技师)意大利俄(教师)

A(医生)X.XX.X

BX.XX..

C(技师)X.XXXX

D......

E(教师)X..X.X

F...X..

43.谁家孩子跑最慢

张王李三家各有三个小孩。

一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,跑第一得9分,跑第2得8分,依此类推。

比赛结果各家的总分相同,且这些孩子没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。

已知获第一名的是李家的孩子,获得第二的是王家的孩子。

问获得最后一名的是谁家的孩子?

*问题分析与算法设计

按题目的条件,共有1+2+3+...+9=45分,每家的孩子的得分应为15分。

根据题意可知:

获第一名的是李家的孩子,获第二名的是王家的孩子,则可推出:

获第三名的一定是张家的孩子。

由“这些孩子没有同时到达终点的”可知:

名次不能并列,由“没有一家的两个或三个孩子获得相连的名次”可知:

第四名不能是张家的孩子。

程序中为了方便起见,直接用分数表示。

 

44.拉丁方

构造NXN阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字1到N只出现一次。

如N=4时:

1234

2341

3412

4123

*问题分析与算法设计

构造拉丁方阵的方法很多,这里给出最简单的一种方法。

观察给出的例子,可以发现:

若将每一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。

按照此规律可以很容易的写出程序。

下面给出构造6阶拉丁方阵的程序。

----------------------------------------------------------------

45.填表格

将1、2、3、4、5和6填入下表中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。

按此要求,可有几种填写方法?

...

.../*两个点之间为表格*/

 

*问题分析与算法设计

按题目的要求进行分析,数字1一定是放在第一行第一列的格中,数字6一定是放在第二行第三列的格中。

在实现时可用一个一维数组表示,前三个元素表示第一行,后三个元素表示第二行。

先根据原题初始化数组,再根据题目中填写数字的要求进行试探。

--------------------------------------------------------

46.1~9分成1:

2:

3的三个3位数

将1到9这九个数字分成三个3位数,分求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍。

问应当怎样分法。

*问题分析与算法设计

问题中的三个数之间是有数学关系的,实际上只要确定第一个三位数就可以解决问题。

试探第一个三位数之后,计算出另外两个数,将其分别分解成三位数字,进行判断后确定所试探的数是否就是答案。

需要提醒的是:

试探的初值可以是123,最大值是333。

因为不可能超出该范围。

--

47.1~9组成三个3位的平方数

将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不允许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数。

*问题分析与算法设计

本问题的思路很多,这里介绍一种简单快速的算法。

首先求出三位数中不包含0且是某个整数平方的三位数,这样的三位数是不多的。

然后将满足条件的三位数进行组合,使得所选出的3个三位数的9个数字没有重复。

程序中可以将寻找足条件的三位数的过程和对该三位数进行数字分解的过程结合起来。

-------------------------------------------------------

48.由8个整数形成奇特的立方体

任意给出8个整数,将这8个整数分别放在一个立方体的八个顶点上,要求每个面上的四个数之和相等。

*问题分析与算法设计

简化问题:

将8个顶点对应数组中的8个元素,将“每个面上的四个数之和皆相等”转换为数组无素之间和的相等关系。

这里的关键在于正确地将立方体的8个顶点与数组的8个元素对应。

可以利用简单的穷举方法建立8个数的全部排列。

 

--------------------------------------------------------------------------------

49.减式还原

编写程序求解下式中各字母所代表的数字,不同的字母代表不同的数字。

PEAR

-ARA

--------

PEA

*问题分析与算法设计

类似的问题从计算机算法的角度来说是比较简单的,可以采用最常见的穷举方法解决。

程序中采用循环穷举每个字母所可能代表的数字,然后将字母代表的数字转换为相应的整数,代入算式后验证算式是否成立即可解决问题。

-----------------------------------------------------------

50.乘式还原

A代表数字0到9中的前五个数字,Z代表后五个数字,请还原下列乘式。

AZA

×AAZ

------------

AAAA

AAZZ

ZAA

------------

ZAZAA

*问题分析与算法设计

问题本身并不复杂,可以对乘式中的每一位使用穷举法,最终可以得到结果。

本题的关键在于怎样有效的判断每个部分积的每一位是否满足题意,这一问题处理不好,编写的程序会很长。

程序实现中采用了一个判断函数,通过传入函数的标志字符串对所有的数进行统一的判断处理。

51.九位累进可除数

求九位累进可除数。

所谓九位累进可除数就是这样一个数:

这个数用到1到9这九个数字组成,每个数字刚好只出现一次。

这九个位数的前两位能被2整除,前三位能被3整除......前N位能被N整除,整个九位数能被9整除。

*问题分析与算法设计

问题本身可以简化为一个穷举问题:

只要穷举每位数字的各种可能取值,按照题目的要求对穷举的结果进行判断就一定可以得到正确的结果。

问题中给出了“累进可除”这一条件,就使得我们可以在穷举法中加入条件判断。

在穷举的过程中,当确定部分位的值后,马上就判断产生的该部分是否符合“累进可除”条件,若符合,则继续穷举下一位数字;否则刚刚产生的那一位数字就是错误的。

这样将条件判断引入到穷举法之中,可以尽可能早的发现矛盾,尽早地放弃不必要穷举的值,从而提高程序的执行效率。

为了达到早期发现矛盾的目的,不能采用多重循环的方法实行穷举,那样编出的程序质量较差。

程序中使用的算法不再是穷举法,而是回朔法。

----------------------------------------------------------------------

52.魔术师的猜牌术

魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下。

对观众说:

我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?

你们就看。

魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上,然后按顺序从上到下数手上的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3。

这样依次进行将13张牌全翻出来,准确无误。

问魔术师手中的牌原始顺序是怎样安排的?

*问题分析与算法设计

题目已经将魔术师出牌的过程描述清楚,我们可以利用倒推的方法,很容易地推出原来牌的顺序。

人工倒推的方法是:

在桌子上放13空盒子排成一圈,从1开始顺序编号,将黑桃A放入1号盒子中,从下一个空盒子开始对空的盒子计数,当数到第二个空盒子时,将黑桃2放入空盒子中,然后再从下一个空盒子开始对空盒子计数,顺序放入3、4、5...,直到放入全部3张牌。

注意在计数时要跳过非空的盒子,只对空盒子计数。

最后牌在盒子中的顺序,就是魔术师手中原来牌的顺序。

这种人工的方法是行之有效的,计算机可以模拟求解。

-----------------------------------------------------------------

53.约瑟夫问题

这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:

15个教徒和15个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:

30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。

问怎样排法,才能使每次投入大海的都是非教徒。

*问题分析与算法设计

约瑟夫问题并不难,但求解的方法很多;题目的变化形式也很多。

这里给出一种实现方法。

题目中30个人围成一圈,因而启发我们用一个循环的链来表示。

可以使用结构数组来构成一个循环链。

结构中有两个成员,其一为指向下一个人的指针,以构成环形的链;其二为该人是否被扔下海的标记,为1表示还在船上。

从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。

这样循环计数直到有15个人被扔下海为止。

 

53.邮票组合

某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?

*问题分析与算法设计

将问题进行数学分析,不同张数和面值的邮票组成的邮资可用下列公式计算:

S=3*i+5*j

其中i为3分邮柰的张数,j为5分的张数

按题目的要求,3分的邮票可以取0、1、2、3、4张,5分的邮票可以取0、1、2、3张。

采用穷举方法进行组合,可以求出这些不同面值不同张数的邮标组合后的邮资。

-------------------------------------------------------------

54.和数能表示1~23的5个正整数

已知五个互不相同的正整数之和为23,且从这五个数中挑选若干个加起来可以表示从1到23之内的全部自然数。

问这五个数是什么?

*问题分析与算法设计

从计算机程序设计的角度来说,可以用穷举法分解23,然后判断所分解的五个数是否可以表示1到23之间的全部整数。

55.可称1~40磅的4块砝码

法国数学家梅齐亚克在他著名的《数字组合游戏》(1962)中提出了一个问题:

一位商人有一个重40磅的砝码,一天不小心将砝码摔成了四块。

后来商人称得每块的重量都是整磅数,而且发现这四块碎片可以在天平上称1至40磅之间的任意重量。

请问这四块碎片各重多少?

*问题分析与算法设计

本题是上一题的发展。

题目中给出的条件是“在天平上”,这意味着:

同一砝码既可以放在天平的左侧,也可以放在天平的右侧。

若规定重物只能放在天平的左侧,则当天平平衡时有:

重物重量+左侧砝码重量总和=右侧砝码重量总和

由此可得:

重物重量=右侧砝码重量总和-左侧砝码重量总和

编程时只要根据以上公式,使“右侧砝码重量总和-左侧砝码重量总和”可以表示1到40之间的全部重量即可。

编程中要注意的是:

怎样采用一种简单的方法来表示一个砝码是在天平的左侧还是在天平的右侧,或是根本没有使用。

----------------------------------------------------------

56.10个小孩分糖果

十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。

然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。

问经过这样几次后大家手中的糖的块数一样多?

每人各有多少块糖?

*问题分析与算法设计

题目描述的分糖过程是一个机械的重复过程,编程算法完全可以按照描述的过程进行模拟。

*程序与程序注释

 

--------------------------------------------------------------------------------

57.76.小明买书

小明假期同爸爸一起去书店,他选中了六本书,每本书的单价分别为:

3.1,1.7,2,5.3,0.9和7.2。

不巧的是,小明的爸爸只带了十几块钱,为了让小明过一个愉快的假期,爸爸扔然同意买书,但提邮购一个要求,要小明从六本书中选出若干本,使得单价相加所得的和同10最接近。

你能够帮助小明解决这个问题吗?

*问题分析与算法设计

分析题意,可将题目简化为:

从六个数中选出若干个求和,使得和与10的差值最小。

题目中隐含两个问题,其一是怎样从六个数中选出若干个数;其二是求与10的差。

从六个数中选出若干个数实质是从六个数中选出若干个进行组合。

每个数在组合过程中只有两种情况:

要么是选中参加求和,要么是没选中不参加求和。

这样就可以使用六重循环对每个数是否参加求和进行全部可能情况的组合。

关于求与10的差值应当注意的是:

差值的含义是指差的绝对值。

例如:

“9-10=-1"和"11-10=1",但9和11这两者与10的差值都是1。

若认为”9“与”10的差值为-1就错了。

58.波松瓦酒的分酒趣题

法国著名数学家波瓦松在表年时代研究过一个有趣的数学问题:

某人有12品脱的啤酒一瓶,想从中倒出6品脱,但他没有6品脱的容器,仅有一个8品脱和5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?

*问题分析与算法设计

将12品脱酒8品脱和5品脱的空瓶平分,可以抽象为解不定方程:

8x-5y=6

其意义是:

从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y次,最后在12品脱的瓶中剩余6品脱的酒。

用a,b,c代表12品脱、8品脱和5品脱的瓶子,求出不定方程的整数解,按照不定方程的意义则倒法为:

a->b->c->a

xy

倒酒的规则如下:

1)按a->b->c->a的顺序;

2)b倒空后才能从a中取

3)c装满后才能向a中倒

按以上规则可以编写出程序如下:

59.奇数平方的一个有趣性质

编程验证“大于1000的奇数其平方与1的差是8的倍数”。

*问题分析与算法设计

本题是一个很容易证明的数学定理,我们可以编写程序验证它。

题目中给出的处理过程很清楚,算法不需要特殊设计。

可以按照题目的叙述直接进行验证(程序中仅验证到3000)。

60.角谷猜想

日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。

猜想的内容是:

任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。

请编程验证。

*问题分析与算法设计

本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。

题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。

61.四方定理

数论中著名的“四方定理”讲的是:

所有自然数至多只要用四个数的平方和就可以表示。

请编程证此定理。

*问题分析与算法设计

本题是一个定理,我们不去证明它而是编程序验证。

对四个变量采用试探的方法进行计算,满足要求时输出计算结果。

62.卡布列克常数

验证卡布列克运算。

任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律:

1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;

2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数中含有0,则得到的数不足四位);

3)求两个数的差,得到一个新的四位数(高位零保留)。

重复以上过程,最后得到的结果是6174,这个数被称为卡布列克数。

*问题分析与算法设计

题目中给出的处理过程很清楚,算法不需要特殊设计,可按照题目的叙述直接进行验证。

--------------------------------------------------------------------------------

63.尼科彻斯定理

验证尼科彻斯定理,即:

任何一个整数的立方都可以写成一串连续奇数的和。

××

*问题分析与算法设计

本题是一个定理,我们先来证明它是成立的。

对于任一正整数a,不论a是奇数还是偶数,整数(a×a-a+1)必然为奇数。

构造一个等差数列,数列的首项为(a×a-a+1),等差数列的差值为2(奇数数列),则前a项的和为:

a×((a×a-a+1))+2×a(a-1)/2

=a×a×a-a×a+a+a×a-a

=a×a×a

定理成立。

证毕。

通过定理的证明过程可知L所要求的奇数数列的首项为(a×a-a+1),长度为a。

编程的算法不需要特殊设计,可按照定理的证明过直接进行验证。

64.回文数的形成

任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。

请编程验证。

*问题分析与算法设计

回文数的这一形成规则目前还属于一个猜想,尚未得到数学上的证明。

有些回文数要经历上百个步聚才能获得。

这里通过编程验证。

题目中给出的处理过程很清楚,算法不需要特殊设计。

可按照题目的叙述直接进行验证。

65.自动发牌

一副扑克有52张牌,打桥牌时应将牌分给四个人。

请设计一个程序完成自动发牌的工作。

要求:

黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。

*问题分析与算法设计

按照打桥牌的规定,每人应当有13张牌。

在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。

为了便于计算机模拟,可将人工方式的发牌过程加以修改:

先确定好发牌顺序:

1、2、3、4;将52张牌顺序编号:

黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,...然后从52张牌中随机的为每个人抽牌。

这里采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。

66.黑白子交换

有三个白子和三个黑子如下图布置:

○○○.●●●

游戏的目的是用最少的步数将上图中白子和黑子的位置进行交换:

●●●.○○○

游戏的规则是:

(1)一次只能移动一个棋子;

(2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过两个子。

请用计算机实现上述游戏。

*问题分析与算法设计

计算机解决胜这类问题的关键是要找出问题的规律,或者说是要制定一套计算机行动的规则。

分析本题,先用人来解决问题,可总结出以下规则:

(1)黑子向左跳过白子落入空格,转(5)

(2)白子向右跳过黑子落入空格,转(5)

(3)黑子向左移动一格落入空格(但不应产生棋子阻塞现象),转(5)

(4)白子向右移动一格落入空格(但不应产生棋子阻塞现萌),转(5)

(5)判断游戏是否结束,若没有结束,则转

(1)继续。

所谓的“阻塞”现象就是:

在移动棋子的过程中,两个尚未到位的同色棋子连接在一起,使棋盘中的其它棋子无法继续移动。

例如按下列方法移动棋子:

0

○○○.●●●

1○○.○●●●

2△○○●○.●●

3

○○●.○●●

4两个●连在一起产生阻塞

○○●●○.●

或4两个白连在一起产生阻塞

○.●○○●●

产生阻塞的现象的原因是在第2步(△状态)时,棋子○不能向右移动,只能将●向左移动。

总结产生阻塞的原因,当棋盘出现“黑、白、空、黑”或“白、空、黑、白”状态时,不能向左或向右移动中间的棋子,只移动两边的棋子。

按照上述规则,可以保证在移动棋子的过程中,不会出现棋子无法移动的现象,且可以用最少的步数完成白子和黑子的位置交换。

 

--------------------------------------------------------------------------------

67.常胜将军

现有21根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一楰火柴谁输。

请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。

*问题分析与算法设计

在计算机后走的情况下,要想使计算机成为“常胜将军”,必须找出取关键。

根据本题的要求枷以总结出,后走一方取子的数量与对方刚才一步取子的数量之和等于,就可以保证最后一个子是留给先取子的那个人的。

据此分析进行算法设计就是很简单的工作,编程实现也十分容易。

68.抢30

这是中国民间的一个游戏。

两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。

*问题分析与算法设计

本题与上题类似,算法也类似,所不同的是,本谁先走第一步是可选的。

若计算机走第一步,那么计算机一定是赢家。

若人先走一步,那么计算机只好等待人犯错误,如果人先走第一步且不犯错误,那么人就

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1