ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:35.50KB ,
资源ID:4409218      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4409218.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序设计大赛题目解答.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序设计大赛题目解答.docx

1、程序设计大赛题目解答程序设计大赛题目解答1. 求代数和设n为正整数,求和式中各项符号为二正一负,分母符号为一正一负。正整数n从键盘输入,输出和s四舍五入精确到小数点后5位。 输入n=100 输出: 输入n=2011 输出: / 求代数和#include #includevoid main() long j,n; double ts,s; printf( 请输入n: ); scanf(%d,&n); j=0;ts=0;s=0; while(jn) j=j+1; if(j%2=0) ts=ts-(double)1/j; / ts为各项的分母 else ts=ts+(double)1/j; if(j

2、%3=0) s=s-sqrt(j)/ts; / 求代数和s else s=s+sqrt(j)/ts; printf( s=%.5f n,s); 请输入n: 100 s=324.74013 请输入n: 2011 s=28924.48725变通:设2n2011,当n为何值时,和s最接近2011?#include#includevoid main() int n,n1=1; double sum1=1,sum2=1,g; printf(请输入n:); scanf(%d,&n); while(n11,说明原a有2,3以外的因数,不属于该序列。若j=1,说明原a只有2,3的因数,属于该序列,把a赋值给序

3、列第k项。由于实施从小到大测试赋值,所得项无疑是从小到大的序列。当a达到指定的n,退出循环,输出指定项f(m)。(2) 枚举程序设计/ 幂序列2x*3y枚举求解 #include void main()int k,m; long a,j,n,f1000; printf( 计算不大于n的项数,请指定n: ); scanf(%ld,&n); printf( 输出序列的第m项,请指定m: ); scanf(%d,&m);f1=1;f2=2;k=2;for(a=3;a=n;a+) j=a; while(j%2=0) j=j/2; / 反复用2试商 while(j%3=0) j=j/3; / 反复用3试

4、商 if(j=1) k+;fk=a; / 用a给fk赋值 printf( 幂序列中不大于%ld的项数为:%dn,n,k); if(m=k) printf( 从小到大排序的第%d项为:%ldn,m,fm); elseprintf( 所输序号m大于序列的项数!n);(3) 程序运行示例n=10000,m=50 输出: 67, 2304n=10000000,m=100 输出:190, 93312变通: 计算集合在指定区间n1,n2中有多少个元素?3. 喝汽水定价 1瓶汽水4角8分钱,同时规定3个空瓶可换回1瓶汽水,或20个空瓶可换回7瓶汽水。例如用5元买10瓶汽水,然后用9个空瓶子换3瓶汽水,喝掉3

5、瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。这样,5元可喝到15瓶汽水。今有n元钱买汽水,最多可喝m瓶汽水。n=100, m= n=2011,m= #include void main() int n1=2011,n,sum,i; double n2; n2=n1/0.48; n=n2; sum=n; while(n20) i=n/20; sum+=i*7; n=i*7+n%20; while(n=2) i=n/3; sum+=i; n=i+n%3; if(n=2) sum+;

6、break; printf(%dn,sum);原题:有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?/ 规定3个空瓶可换回1瓶汽水。开始有n个空瓶,最多可喝多少瓶汽水? #includevoid main() long n,m,t,x;printf( 请输入开始拥有的

7、空瓶数n:); scanf(%ld,&n);t=n;m=0; / 确定初始值 while(t=3) x=t/3;m=m+x; / 用3x个空瓶换回x瓶汽水t=t-2*x; / 空瓶数减少2x个printf( 用其中%ld个空瓶换回%ld瓶汽水。,3*x,x);printf(喝完后空瓶个数变为%ld.n,t); if(t=2) m=m+1;printf( 借 1 瓶汽水,再还3空瓶,两清.n);printf( 答案:开始有%ld个空瓶,可喝%ld瓶汽水。n,n,m);请输入开始拥有的空瓶数n:2012 用其中2010个空瓶换回670瓶汽水。喝完后空瓶个数变为672. 用其中672个空瓶换回224

8、瓶汽水。喝完后空瓶个数变为224. 用其中222个空瓶换回74瓶汽水。喝完后空瓶个数变为76. 用其中75个空瓶换回25瓶汽水。喝完后空瓶个数变为26. 用其中24个空瓶换回8瓶汽水。喝完后空瓶个数变为10. 用其中9个空瓶换回3瓶汽水。喝完后空瓶个数变为4. 用其中3个空瓶换回1瓶汽水。喝完后空瓶个数变为2. 借 1 瓶汽水,再还3空瓶,两清. 答案:开始有2012个空瓶,可喝1006瓶汽水。解: 因7/201/3,因此只要空瓶数大于等于20,尽可能用20个空瓶可换回7瓶汽水。直到空瓶数不足20时,用3个空瓶可换回1瓶汽水。由 20空瓶=7汽水+7空瓶得 1空瓶=7/13汽水由 3空瓶=1汽

9、水+1空瓶得 1空瓶=1/2汽水设置变量k统计汽水瓶数,t统计空瓶数。/ 规定1瓶汽水48分钱,今有n元钱; 规定3个空瓶可换回1瓶汽水,/ 或20个空瓶可换回7瓶汽水。问最多可喝多少瓶汽水? #includevoid main() long k,n,t,x;printf( 请输入n:); scanf(%ld,&n);k=n*100/48; t=k; / k为汽水瓶数,t为空瓶数printf( 有%ld元钱,可买回%ld瓶汽水。,n,k); if(n*100k*48) printf( 尚余%ld分钱。,n*100-k*48);printf(n 喝完%ld瓶汽水后,空瓶按以下方案换回汽水:n,k

10、);while(t=20) x=t/20;k=k+7*x; / 用20x个空瓶换回7x瓶汽水t=t-13*x; / 空瓶数减少13x个printf( 用其中%ld个空瓶换回%ld瓶汽水。,20*x,7*x);printf(喝完后空瓶个数变为%ld.n,t); if(t=13) k=k+7;t=t-13;printf( 借 7 瓶汽水,再还20空瓶,空瓶个数变为%ld.n,t);while(t=3) x=t/3;k=k+x; / 用3x个空瓶换回x瓶汽水t=t-2*x; / 空瓶数减少2x个printf( 用其中%ld个空瓶换回%ld瓶汽水。,3*x,x);printf(喝完后空瓶个数变为%ld

11、.n,t); if(t=2) k=k+1;printf( 借 1 瓶汽水,再还3空瓶.n);printf( 答案:有%ld元钱,最多可喝%ld瓶汽水。n,n,k); 请输入n:100 有100元钱,可买回208瓶汽水。 尚余16分钱。 喝完208瓶汽水后,空瓶按以下方案换回汽水: 用其中200个空瓶换回70瓶汽水。喝完后空瓶个数变为78. 用其中60个空瓶换回21瓶汽水。喝完后空瓶个数变为39. 用其中20个空瓶换回7瓶汽水。喝完后空瓶个数变为26. 用其中20个空瓶换回7瓶汽水。喝完后空瓶个数变为13. 借 7 瓶汽水,再还20空瓶,空瓶个数变为0. 答案:有100元钱,最多可喝320瓶汽水

12、。 请输入n:2011 有2011元钱,可买回4189瓶汽水。 尚余28分钱。 喝完4189瓶汽水后,空瓶按以下方案换回汽水: 用其中4180个空瓶换回1463瓶汽水。喝完后空瓶个数变为147 用其中1460个空瓶换回511瓶汽水。喝完后空瓶个数变为523. 用其中520个空瓶换回182瓶汽水。喝完后空瓶个数变为185. 用其中180个空瓶换回63瓶汽水。喝完后空瓶个数变为68. 用其中60个空瓶换回21瓶汽水。喝完后空瓶个数变为29. 用其中20个空瓶换回7瓶汽水。喝完后空瓶个数变为16. 借 7 瓶汽水,再还20空瓶,空瓶个数变为3. 用其中3个空瓶换回1瓶汽水。喝完后空瓶个数变为1. 答

13、案:有2011元钱,最多可喝6444瓶汽水。省去过程,简化设计:/ 规定1瓶汽水48分钱,今有n元钱; 规定3个空瓶可换回1瓶汽水,/ 或20个空瓶可换回7瓶汽水。问最多可喝多少瓶汽水? #includevoid main() long k,n,t,x;printf( 请输入n:); scanf(%ld,&n);k=n*100/48; t=k; / k为汽水瓶数,t为空瓶数x=t/13;k=k+7*x; / 实现1空瓶=7/13瓶汽水t=t-13*x; / 空瓶数减少13x个x=t/2;k=k+x; / 实现1空瓶=1/2瓶汽水printf( 答案: %ld元钱最多可喝%ld瓶汽水。n,n,k

14、); 请输入n:100 答案: 100元钱最多可喝320瓶汽水。 请输入n:2011 答案: 2011元钱最多可喝6444瓶汽水。4. 解佩尔方程1. 案例背景佩尔(Pell)方程是关于x,y的二次不定方程,表述为 (其中n为非平方正整数)当x=1或x=-1,y=0时,显然满足方程。常把x,y中有一个为零的解称为平凡解。我们要求佩尔方程的非平凡解。佩尔方程的非平凡解很多,这里只要求出它的最小解,即x,y为满足方程的最小正数的解,又称基本解。对于有些n,尽管是求基本解,其数值也大得惊人。这么大的数值,如何求得?其基本解具体为多少?可以说,这是自然界对人类计算能力的一个挑战。十七世纪曾有一位印度数

15、学家说过,要是有人能在一年的时间内求出x2-92y2=1的非平凡解,他就算得上一名真正的数学家。由此可见,佩尔方程的求解是有趣的,其计算也是繁琐的。输入n=92,方程的基本解:输入n=73,方程的基本解:2. 枚举设计应用枚举试值来探求佩尔方程的基本解。设置y从1开始递增1取值,对于每一个y值,计算a=n*y*y后判别:若a+1为某一整数x的平方,则(x,y)即为所求佩尔方程的基本解。若a+1不是平方数,则y增1后再试,直到找到解为止。应用以上枚举探求,如果解的位数不太大,总可以求出相应的基本解。如果基本解太大,应用枚举无法找到基本解,可约定一个枚举上限,例如10000000。可把y10000

16、000时结束循环,输出“未求出该方程的基本解!”而结束。3. 程序设计/ 解 PELL方程: x2-ny2=1 #include #include void main()double a,m,n,x,y; printf( 解PELL方程: x2-ny2=1.n); printf( 请输入非平方整数 n:); scanf(%lf,&n); m=floor(sqrt(n+1); if(m*m=n) printf( n为平方数,方程无正整数解!n); return; y=1;while(y10000000)printf( 未求出该方程的基本解!); 4. 程序运行示例与说明 解PELL方程: x2-

17、ny2=1. 请输入非平方整数 n:73 方程x2-73y2=1的基本解为: x=2281249, y=267000为了提高求解方程的范围,数据结构设置为双精度(double)型。如果设置为整形或长整形,方程的求解范围比设置为双精度型要小。例如n=73时,设置整形或长整形就不可能求出相应方程的解。可见,数据结构的设置对程序的应用范围有着直接的影响。对某些n,相应佩尔方程解的位数太大。例如当n=991时,相应佩尔方程的基本解达30位。此时只有通过某些专业算法(例如连分数法)才能进行求解。5. 分解质因数整数分解质因数是最基本的分解。例如,90=2*3*3*5, 1960=23*5*72,前者为质

18、因数乘积形式,后者为质因数的指数形式。把指定区间上的所有整数分解质因数,每一整数表示为质因数从小到大顺序的乘积形式。如果被分解的数本身是素数,则注明为素数。例如, 92=2*2*23, 91(素数!)。分解:1671861 5845271 6. 构建横竖折对称方阵试观察图所示的横竖折对称方阵的构造特点,总结归纳其构造规律,设计并输出n(奇数)阶对称方阵。图 7阶横竖对称方阵输出15阶、19阶横竖折对称方阵。10. 统计试统计含有数字7且不能被7整除的m位整数的个数s1,并指出这s1个数中不含有数字4的整数的个数s2。 输入m, 输出s1,s2。m=5, 输出: m=6, 输出: (1) 设计要

19、点首先通过乘m-1个10计算m位数的起点b=10(m-1),为枚举提供范围t(b10*b-1)。为了检测m位数t含有多少个数字7,每个m位整数t赋给d(以保持t不变),然后通过m次求余先后分离出t的m个数字c,if(c=7) f+, 统计整数t中数字7的个数f。同时统计数字4的个数g。如果f0,说明整数t中含有数字7。如果g=0,说明整数t中不含数字4。对每一个m位整数,据f0 & t%70, s1作相应统计。据f0 & t%70 & g=0, s2作相应统计。(2) 程序设计/ 统计含数字7且不能被7整除的m位整数的个数s1,其中不含数字4的个数s2#include void main()

20、int c,f,g,i,j,m; long b,d,s1,s2,t; printf( 请输入位数m (2=m=9): ); scanf(%d,&m); b=1; s1=0;s2=0; for(i=2;i=m;i+) b=b*10; / 计算m位数的起点 for(t=b;t=10*b-1;t+) / 枚举每一个m位数 d=t; f=0;g=0; for(j=1;j0 & t%70) s1+; / 统计含数字7且不能被7整除数的个数 if(f0 & t%70 & g=0) s2+; / 统计其中不含数字4的个数 printf( s1=%ld ,s2=%ld n,s1,s2); (3) 程序运行示例

21、请输入位数m (2=k=9): 5 s1=32152 ,s2=20412 请输入位数m (2=k3)位整数中恰含有2个7且恰含有1个4的整数的个数.11. 构建斜折对称方阵试观察图所示的斜折对称方阵的构造特点,总结归纳其构造规律,设计并输出n(奇数)阶斜折对称方阵。图 7阶斜折对称方阵输出15阶、19阶斜折对称方阵。(1) 构造规律与赋值要点斜折对称方阵的构造特点:两对角线上均为“0”,依两对角线把方阵分为4个区域,每一区域表现为同数字依附两对角线折叠对称,至上下左右正中元素为n/2。同样设置2维ann数组存储方阵中元素,行号为i,列号为j,aij为第i行第j列元素。令m=(n+1)/2, 按

22、m把方阵分成的4个小矩形区如图所示。图 按m分成的4个小矩形注意到方阵的主对角线(从左上至右下)上元素为:i=j,则左上区与右下区依主对角线赋值:aij=abs(i-j);注意到方阵的次对角线(从右上至左下)上元素为:i+jn+1,则右上区与左下区依次对角线赋值:aij=abs(i+j-n-1);(2) 程序设计/ 斜折对称方阵#include #include void main()int i,j,m,n,a3030; printf( 请确定方阵阶数(奇数)n: ); scanf(%d,&n);if(n%2=0) printf( 请输入奇数!);return; m=(n+1)/2; for(

23、i=1;i=n;i+) for(j=1;j=n;j+) if(i=m & jm & jm) aij=abs(i-j); / 方阵左上部与右下部元素赋值 if(im | im & j=m) aij=abs(i+j-n-1); / 方阵右上部与左下部元素赋值 printf( %d阶对称方阵为:n,n); for(i=1;i=n;i+) for(j=1;j=n;j+) / 输出对称方阵 printf(%3d,aij); printf(n); 运行以上两个程序,可以在欣赏各个具体的对称方阵中,感受从特例到一般的神奇。12. 台球碰撞在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)

24、的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球沿极角为b的射线(即:x正半轴逆时针旋转到此射线的角度为b)以初速度v飞出。因球与桌面的磨擦,球作的加速度为a的匀减速率运动,每次碰到球桌边框时均发生完全弹性碰撞(反射角等于入射角)。试求球停止时球心所在位置。输入: l=180,w=120,x=35,y=40,r=5,b=30,v=27,a=6输出:(87.61,70.37)原题:在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在(L,W)的矩形。有一个球心在(x,y),半径为R的圆形母球放在台球桌上(整个球都在台球桌内)。受撞击后,球

25、沿极角为a的射线(即:x正半轴逆时针旋转到此射线的角度为a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角)。如果球的速率为v,s个时间单位之后球心在什么地方?输入输入文件最多包含25组测试数据,每个数据仅一行,包含8个正整数L,W,x,y,R,a,v,s(100=L,W=105, 1=R=5, R=x=L-R, R=y=W-R, 0=a360, 1=v,s=105),含义见题目描述。L=W=x=y=R=a=v=s=0表示输入结束,你的程序不应当处理这一行。输出对于每组数据,输出仅一行,包含两个实数x, y,表明球心坐标为(x,y)。x和y应四舍五入保留两位小数。样例输入样例输出100 100 80 10 5 90 2 23110 100 70 10 5 180 1 99990 0 0 0 0 0 0 080.00 56.0071.00 10.00设计要点:(1) (1)确定球心区域设球心座标为(x,y),则有球心矩形区域:x1xx2,y1yy2其中:x1=r,x2=l-r; y1=r,y2=w-r(2) 没撞击时球位置设开始时球心位于(x0,y0),球沿极角为a的射线射出,球的速率为v,s

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1