C语言课外题:
文曲星里的猜数游戏:
如果你想锻炼自己的编程能力,请不要做什么习题。试着写个小游戏玩吧,比如文曲星里的猜数游戏,规则是:
电脑随机生成一个没有重复数字的4位整数,让游戏者来猜它是什么。每次猜测的结果以“?A?B”的形式告诉你,A前面的数字表明有几个数字不仅猜对了而且位置也对,B前面的数字表明有几个数字猜对了但是位置不对。当显示4A时表示全部猜对。游戏者对猜测的结果进行逻辑判断,尽量用最少的步数猜出最终结果。
编写这个游戏既娱乐又锻炼,还可以发挥你的聪明才智,让它变得更方便、更有趣。如果还能做一个自动“猜数”的程序来解题,那就更酷了。
计算到期存款本息之和:
已知银行整存整取存款不同期限的月息利率分别为:
2.25% 期限一年
2.43% 期限二年
年息利率= 2.70% 期限三年
2.88% 期限五年
3.00% 期限八年
要求输入存钱的本金和期限,求到期时,能从银行得到的利息与本金的合计。
存款预算:
假设银行一年整存零取的月息为1.875%,现在某人手头有一笔钱,他打算在今后的五年中每年的年底取出1000元作为孩子来年的教育金,到第五年孩子毕业时刚好取完这笔钱,现在请你算一算第一年年初他应存入银行多少钱呢?
[提示:分析存钱和取钱的过程可采用逆推的方法,然后采用迭代法求解。若第五年年底连本带息要取出1000元,则第五年年初银行中的存款数额y5应为:
y5 = 1000 / (1 + 12 * 0.01875)
按题意,由第五年年初银行中的存款数额y5,求得第四年年初银行中的存款数额y4应为:
y4 = (y5 + 1000) / (1 + 12 * 0.01875)
依此类推,可由第n+1年年初银行中的存款数额yn+1求得第n年年初银行中的存款数额y n为:
y n = (y n+1 + 1000) / (1 + 12 * 0.01875)
以0作为y n+1的初值,对上式进行逆推迭代,迭代5次的结果即为第1年年初银行中的存款数额y 1,也就是他现在要存入银行的钱数。
答案:2833.29元。]
寻找最佳存款方案:
已知银行整存整取存款不同期限的月息利率分别为:
2.25% 期限一年
2.43% 期限二年
年息利率= 2.70% 期限三年
2.88% 期限五年
3.00% 期限八年
假设银行对定期存款过期部分不付利息,现在某人有2000元钱,要存20年,问怎样存才能使20年后得到的本利之和合计最多?
[提示:为了得到最多的利息,存入银行的钱应在到期时马上就取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样本利不断地滚动直到满二十年为止。由于存款的利率不同,所以,不同的存款方法(年限)存二十年得到的利息也是不一样的。]
抓交通肇事犯:
一辆卡车违反了交通规则,撞人后逃逸。现场有三人目击事件,但都没有记住车号,只记住车号的一些特征。甲说:车号的前两位数字是相同的;乙说:车号的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号正好是一个整数的平方。现在请你根据以上线索帮助警方找出车号以便尽快破案。
[提示:假设这个四位数的前两位数字都是i,后两位数字都是j,则这个可能的四位数k为:
k = 1000 * i + 100 * i + 10 * j + j
其中,i和j都在0~9之间变化。
现在还需使k满足是一个整数m的平方,由于k是一个四位数,所以,m值不可能小于31,因此,可从31开始试验是否满足k == m*m,若不满足,则m加1再试,直到找到满足这些限制条件的k为止结束测试。
答案:k = 7744, m = 88]
计算礼炮声响次数:
为庆祝活动,现在,A、B、C三条军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,那么请问观众总共可以听到几次礼炮声呢?
[提示:用n作为听到的礼炮声响的计数器,用t表示时间,从第0秒开始放第1响,到放完最后一响,最长时间为20*7,因此,可以用一个for循环来模拟每一秒钟的时间变化,即t从0开始循环到t>20*7时结束。在循环体中判断:如果时间t是5的整数倍且21响未放完,则A舰放一响,计数器n加1;如果时间t是6的整数倍且21响未放完,则B舰放一响,计数器n加1;如果时间t是7的整数倍且21响未放完,则C舰放一响,计数器n加1。但要注意:当有两舰或三舰同时鸣放时,应作1响统计,即n不能同时计数,只要有一个执行了计数,其它两个就不能再进行计数。
答案:54响]
简单的口令检查程序:
按下述要求编写口令检查程序(假设正确的口令为8888)。
(1)若输入口令正确,则提示“You are welcom!”,程序结束;
(2)若输入口令不正确,则提示“Wrong passward!”,同时检查口令是否已输入三次,若未输入三次,则提示”Enter again:”,且允许用户再次输入口令,相反,若已输入了三次,则提示“You have entered three times! You are not welcom!”, 且不允许用户再输入口令,程序结束。
[提示:设置一个计数器,每输入一次口令,计数器计数一次,同时,设置标志变量flag,当输入口令正确或虽然输入不正确但已输入三次时,置标志变量flag置为0,不允许再输入,结束程序,反之,如果标志变量未发生改变(即为1)时,则请求用户继续输入口令。]
求游戏人员的年龄:
有5个人围坐在一起,问第五个人多大年纪,他说比第4个人大2岁;问第4个人,他说比第3个人大2岁;问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。第一个人说自己10岁,问第5个人多大年纪。