9月21日ACM作业解题报告..doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9月21日ACM作业解题报告.

9.21ACM作业解题报告 答案见下方。 1001 题目大意是f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.求给定n的f(n)。 该题难度适中,适当的带入数据易于发现数据成周期性循环,只需找到数据周期即可,方法是找到前方与现在数据连续两到三项相同的,即为周期数量。 #includestdio.h int main() { int i,j, a, b, t, f[10000]; int n; while (scanf(%d%d%d, a, b, n) != EOF (a || b || n)) { f[1] = 1; f[2] = 1; t = 0; for (i = 3; i = n; i++) { f[i] = (a * f[i - 1] + b * f[i - 2]) % 7; for (j = 2; j i; j++) if (f[i] == f[j] f[i - 1] == f[j - 1]) { t = i - j; break; } if(j i) break; } if (t != 0 (n - j + 2) % t) printf(%d\n, f[(j - 2) + (n - j + 2) % t]); else if(t == 0) printf(%d\n, f[n]); else printf(%d\n, f[i - 2]); } return 0; } 1002 题目大意是给一组很长的数字(可能超过10的九次方,也就是int的长度),求各位数字之和,如果这个和大于10,就继续求各位数字和,知道和小于10结束。 该题难度较为容易,注意字符长度,用字符串的方式操作较为轻松。 #include stdio.h #include stdlib.h int f(int a) { int s; s=0; while(a0) { s+=a%10; a/=10; } if(s10) return s; else return f(s); } int main() { int i,s; char a[10000]; scanf(%s,a); while(a[0]!=0) { s=0; for(i=0;a[i]!=0;i++) { s+=a[i]-0; } printf(%d\n,f(s)); scanf(%s,a); } return 0; } 1003 题目大意是有N组数据,每组数据有很多行,每行含有n,m,当n=m=0的时候该组数据结束。求满足0 a b n 和 (a^2+b^2 +m)/(ab)的a,b的组数。 该题难度较易,主要注意输出格式的控制,如Case 2: 4,其中C为大写,2前面有一个空格,4前面也有一个空格。 #include stdio.h #include stdlib.h int main() { freopen(IO.txt,r,stdin); int N,n,m; int i,j,count,k; scanf(%d,N); while(N) { scanf(%d%d,n,m); for(i=1;m||n;i++) { count=0; for(j=1;jn;j++) { for(k=1;kj;k++) { if(((j*j)+(k*k)+m)%(j*k)==0) count++;

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档