c语言竞赛和算法总结
- 格式:doc
- 大小:97.94 KB
- 文档页数:23


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 . X X . XB X . X X . .C(技师) X . X X X XD . . . . . .E(教师) X . . X . XF . . . X . .43.谁家孩子跑最慢张王李三家各有三个小孩。
C语言竞赛练习题目录一、穷举1、求最大数2、高次方数的尾数3、借书方案知多少6、抓交通肇事犯12、平分七筐鱼13、有限5位数14、除不尽的数15、一个奇异的三位数16、位反序数17、求车速18、阿姆斯特朗数19、完全数20、亲密数21、自守数22、回文数23、求具有abcd=(ab+cd)2性质的四位数24、求素数25、歌德巴赫猜想26、要发就发27、素数幻方28、百钱百鸡问题29、斯坦的数学题31、换分币32、三色球问题33、马克思手稿中的数学题34、分数比较、分数之和35、将真分数分解为埃及分数36、列出真分数序列37、计算分数的精确值38、谁是窃贼39、黑与白40、迷语博士的难题41、哪个大夫哪天值班42、区分旅客国籍43、谁家孩子跑最慢44、拉丁方45、填表格46、1~9分成1:2:3的三个3位数47、1~9组成三个3位的平方数48、由8个整数形成奇特的立方体49、减式还原50、乘式还原51、九位累进可除数52、魔术师的猜牌术53、约瑟夫问题、邮票组合54、和数能表示1~23的5个正整数55、可称1~40磅的4块砝码56、10个小孩分糖果57、小明买书61、四方定理63、尼科彻斯定理65、自动发牌66、黑白子交换67、常胜将军二、计算4、数制转换5、打鱼还是晒网7、该存多少钱8、怎样存钱利最大9、捕鱼和分鱼10、出售金鱼11、分数四则运算30、年龄几何58、波松瓦酒的分酒趣题59、波松瓦酒的分酒趣题60、角谷猜想62、卡布列克常数64、回文数的形成1.求最大数问555555的约数中最大的三位数是多少?*问题分析与算法设计根据约数的定义,对于一个整数N,除去1和它自身外,凡能整除N的数即为N的约数。
因此,最简单的方法是用2到N-1之间的所有数去除N,即可求出N的全部约数。
本题只要求取约数中最大的三位数,则其取值范围可限制在100到999之间。
*程序说明与注释#include<stdio.h>void main(){long i;int j;printf("Please input number:");scanf("%ld",&i);for(j=999;j>=100;j--)if(i%j==0){printf("The max factor with 3 digits in %ld is:%d,\\n",i,j);break;}*运行结果输入:555555输出:The max factor with 3 digits in 555555 is:7772.高次方数的尾数求13的13次方的最后三位数*问题分析与算法设计解本题最直接的方法是:将13累乘13次方截取最后三位即可。
快速幂取模算法在网站上一直没有找到有关于快速幂算法的一个详细的描述和解释,这里,我给出快速幂算法的完整解释,用的是C 语言,不同语言的读者只好换个位啦,毕竟读C 的人较多~ 所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。
在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。
[有读者反映在讲快速幂部分时有点含糊,所以在这里对本文进行了修改,作了更详细的补充,争取让更多的读者一目了然]我们先从简单的例子入手:求c a b mod = 几。
算法1.首先直接地来设计这个算法:int ans = 1;for (int i = 1;i<=b;i++){ans = ans * a;}ans = ans % c;这个算法的时间复杂度体现在for 循环中,为O (b ).这个算法存在着明显的问题,如果a 和b 过大,很容易就会溢出。
那么,我们先来看看第一个改进方案:在讲这个方案之前,要先有这样一个公式: c c a c a b b m od )m od (m od =.这个公式大家在离散数学或者数论当中应该学过,不过这里为了方便大家的阅读,还是给出证明:引理1:cc b c a c de cde c dk te tkc ce kc d tc c ab ekc b e c b dtc a d c a cc b c a c ab mod )]mod ()mod [(mod mod ))((mod ))((mod mod mod mod )]mod ()mod [(mod )(:2⨯==+++=++=+=⇒=+=⇒=⨯=证明:公式上面公式为下面公式的引理,即积的取余等于取余的积的取余。
ca c c a c c c a cc a cc a c a b b b b b b mod mod ])mod [()(mod ])mod )mod [((mod ])mod [(mod )mod (mod ===由上面公式的迭代证明:公式:证明了以上的公式以后,我们可以先让a 关于c 取余,这样可以大大减少a 的大小, 于是不用思考的进行了改进:算法2:int ans = 1;a = a % c; //加上这一句for (int i = 1;i<=b;i++){ans = ans * a;}ans = ans % c;聪明的读者应该可以想到,既然某个因子取余之后相乘再取余保持余数不变,那么新算得的ans 也可以进行取余,所以得到比较良好的改进版本。
洛谷c语言刷题引言概述:洛谷是一个在线的编程学习和竞赛平台,提供了大量的题目供程序员练习和挑战。
在洛谷上刷题是提高C语言编程能力的一种有效方法。
本文将从五个方面详细阐述洛谷C语言刷题的重要性和方法。
正文内容:1. 提高编程技巧1.1 学习算法和数据结构洛谷平台上的题目涵盖了各种算法和数据结构的应用,通过刷题可以学习和掌握这些重要的编程基础知识,提高编程技巧。
1.2 锻炼解决问题的能力刷题过程中,会遇到各种难题和复杂的情况,解决这些问题需要灵活运用编程知识和思维能力,锻炼解决问题的能力。
2. 拓宽编程思路2.1 探索不同的解题思路洛谷上的题目有多种解题方法,通过刷题可以接触到不同的解题思路,拓宽自己的编程思路。
2.2 学习他人的优秀代码洛谷上有很多高手的优秀代码,通过学习他们的代码可以提高自己的编程水平,了解更多的编程技巧和优化方法。
3. 提升代码质量3.1 锻炼编程规范意识洛谷要求提交的代码必须符合编程规范,刷题过程中要求自己的代码符合规范,提升自己的编程规范意识。
3.2 优化算法和代码刷题过程中,可以通过不断优化算法和代码,提高代码的效率和质量,使代码更加简洁、清晰。
4. 增加编程经验4.1 掌握常见问题的解决方法洛谷上的题目覆盖了各种常见问题,通过刷题可以掌握这些问题的解决方法,积累宝贵的编程经验。
4.2 锻炼调试能力刷题过程中,会遇到各种错误和bug,通过调试和解决这些问题,可以提高自己的调试能力和排错能力。
5. 增强自信心5.1 克服困难和挑战刷题过程中会遇到各种困难和挑战,通过坚持不懈的努力,克服这些困难和挑战,可以增强自己的自信心。
5.2 提高解决问题的能力通过刷题,不断提高自己的解决问题的能力,解决更多的问题,也会增强自信心。
总结:通过洛谷C语言刷题,可以提高编程技巧,拓宽编程思路,提升代码质量,增加编程经验和增强自信心。
刷题是一个有效的学习和提高编程能力的方法,希望大家能够充分利用洛谷这个平台,不断刷题,提高自己的编程水平。