- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
丽水学院计算机与信息工程学院 C语言程序实践教学组 内容提要 数学题 规律题 简单字符串题 贪心算法 递推求解 一、数学题的解题思路 1.数学题主要是把问题理解清楚,特别是其中的数学关系。 2.特别大的数字主要看题目的内容会不会溢出。如果溢出可以用LONG 32位,不行再加个LONG 64位。在VC下不支持,在GC++中支持。 3.用浮点数也要考虑精度和输出的位数。 一、数学题的解题思路 例题:鸡兔同笼 问题描述 一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物? 输入数据 第1 行是测试数据的组数n,后面跟着n 行输入。每组测试数据占1 行,包括一个正整数a (a 32768)。 输出要求 n 行,每行输出对应一个输入。输出是两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用空格分开。如果没有满足要求的情况出现,则输出2 个0。 一、数学题的解题思路 输入样例 2 3 20 输出样例 0 0 5 10 一、数学题的解题思路 解题思路 这个问题可以描述成任给一个整数 N,如果N 是奇数,输出0 0,否则,如果N 是4 的倍数,输出N / 4 N / 2,如果N 不是4 的倍数,输出N/4+1 N/2。这是一个一般的计算题,只要实现相应的判断和输入、输出代码就可以了。题目中说明了输入整数在一个比较小的范围内,所以只需要考虑整数运算就可以了。 一、数学题的解题思路 参考程序 #include stdio.h void main( ) {int nCases, i, nFeet; //nCases 表示输入测试数据的组数,nFeet 表示输入的脚数。 scanf(%d, nCases); for(i = 0; i nCases; i++) { scanf(%d, nFeet); if(nFeet %2 != 0) // 如果有奇数只脚,则输入不正确, // 因为不论2 只脚还是4 只脚,都是偶数 printf(0 0\n); else if (nFeet%4 != 0) //若要动物数目最少,使动物尽量有4 只脚 //若要动物数目最多,使动物尽量有2 只脚 printf(%d %d\n, nFeet / 4 + 1, nFeet / 2); else printf(%d %d\n, nFeet / 4, nFeet / 2); } } 二、规律题的解题思路 1.确定系统中的规律。 2.可以通过查看输出结果的方式查找规律,有些题目可能要好几个数据后有规律。 3.一般1S的题目,而且看起来可以用循环解决的要考虑规律。 4.一般1S可以循环1000万次左右。 二、规律题的解题思路 例题:数字序列 问题描述 一个数字序列由以下公式定义 f(0) = 7, f(1) = 11, f(n) = f(n - 1) + f(n - 2) 输入数据 测试用例由多行构成,每行有1个数字n (2 = n = 1,000,000) 输出要求 每个测试用例输出一行,如果f(n) 能被3整除则输出“YES”,否则输出“NO” 二、规律题的解题思路 输入样例 2 3 4 输出样例 YES NO NO 二、规律题的解题思路 解题思路 本题如果直接用递归做肯定超时,只能去发现题目的规律。 先用递归程序求出n=2..20时值,值如下所示: f(2) =18, f(3) =29, f(4) =47, f(5) =76, f(6) =123, f(7) =199, f(8) =322, f(9) =521, …… 除以3后的余数分别是: 0 2 2 1 0 1 1 2 0 2 2 1 0 1 1 2 0 2 2 从上面的数字可以发现规律n=2,6,10,14,18能被3整除。知道规律后程序就非常简单了。 二、规律题的解题思路 参考程序 #include stdio.h void main( ) { int n; while(scanf(%d”,n) != EOF) //测试用例由多行构成 { if(n%4 == 2) // n=2,6,10,14,18……能被3整除 printf(“YES\n”); else printf(“NO\n”); } } 第四章 ACM入
文档评论(0)