C语言本科组模拟题编程大题分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言本科组模拟题编程大题分析

以下为2011年C语言本科组的模拟题的7~10题以及我自己写的部分程序,由于水平有限,程序中还有很多错误与不足,恳请大家指教 7.代码设计(满分5分) 625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗? 请编写程序,寻找所有这样的3位数:它的平方的末3位是这个数字本身。 输出结果中,从小到大,每个找到的数字占一行。比如那个625就输出为: 625 解题思路: 对所有的三位数从小到大进行穷举,判断是否符合条件,若符合则输出 实现方法: 先求出当前三位数的平方,用平方数减去该三位数,再用平方数对1000求余,若余数为0则该三位数符合条件,将该三位数输出。 程序代码: #includeiostream using namespace std; int main() { for(int i = 100; i = 999; ++i) { int x = i * i; int a; x = x - i; a = x % 1000; if(0 == a) coutiendl; /*if( x = 100000 ) a = x % 1000; else a = x % 100; if( a == i ) coutiendl;*/ } return 0; } 运行结果: 376 625 9.代码设计(满分18分) 整数的分划问题。 如,对于正整数n=6,可以分划为: 6 5+1 4+2,4+1+1 3+3,3+2+1,3+1+1+1 2+2+2,2+2+1+1,2+1+1+1+1 1+1+1+1+1+1 现在的问题是,对于给定的正整数n,编写算法打印所有划分。 用户从键盘输入n(范围1~10) 程序输出该整数得所有划分。 解题思路: 从n到1进行循环,将n分解,分解得到的数中的最大的数是当前的循环变量,然后在分解得到的数中从后往前依次将大于1的数进行分解,为便于实现这一过程我们将分解完的数存放到链表中。 实现方法: 将将要被分解的数存放到链表第一个结点的位置,然后将其分解,将分解得到的数再存入到链表中,然后在从后往前遍历分解得到的数,依次对大于1的数调用分解函数进行分解。每分解一次便输出一次。 程序代码: #includeiostream #define NULL 0 using namespace std; typedef struct Mynum{ int x; struct Mynum *next; }num,*nump; nump head; nump s(nump pot,int i); void fun(nump px); int main() { int n; coutplease input a integer(1~10):endl; cinn; coutendl现在开始分解:endl; for(int j = n;j 0;--j) { nump t = new (num); t-next = NULL; t-x = n; //调用是s()函数将n分解成最大值为j的几个数的和的形式 head = s(t,j); //输出第一次分解后的结果 nump pt = head; while(pt != NULL) { if(pt-next) coutpt-x+; else coutpt-x; pt = pt-next; } //调用fun()函数对第一个数以后的数进行分解 fun(head-next); coutendl; } return 0; } //将pot的x域中的数分解成最大值为i的n个数的和,并连接到链表中的原来位置 nump s(nump pot,int i) { nump q,p,temp; p = pot; q = pot; temp = p-next; int a = p-x - i; p-x = i; while(a = 1) { q = new(num); if(a i) { a = a - i; q-x = i; } else { q-x = a; a = 0; } q-next = NULL; p-next = q; p = q; } q-next = temp; return pot; } //使用该函数对链表中除第一个以外的所有大于1的数调用是s()函数,自后向前进行分解 void fun(nump px) { if(px == NULL) return; nump q,p; q = p

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档