资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2012 程序设计竞赛基础实训 8239 台球碰撞在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在( L,W)的矩形。有一个球心在( x,y),半径为 R 的圆形母球放在台球桌上(整个球都在台球桌内) 。受撞击后,球沿极角为 b 的射线(即: x 正半轴逆时针旋转到此射线的角度为 b)以初速度 v 飞出。因球与桌面的磨擦,球作的加速度为 a 的匀减速率运动,每次碰到球桌边框时均发生完全弹性碰撞(反射角等于入射角) 。试求球停止时球心所在位置。输入: l=180,w=120,x=35,y=40,r=5,b=30,v=27,a=6原题:在平面直角坐标系下,台球桌是一个左下角在(0,0),右上角在( L,W)的矩形。有一个球心在( x,y),半径为 R 的圆形母球放在台球桌上(整个球都在台球桌内) 。受撞击后,球沿极角为 a 的射线(即: x 正半轴逆时针旋转到此射线的角度为 a)飞出,每次碰到球桌时均发生完全弹性碰撞(球的速率不变,反射角等于入射角) 。如果球的速率为 v, s 个时间单位之后球心在什么地方?输入输入文件最多包含 25 组测试数据,每个数据仅一行,包含 8 个正整数L,W,x,y,R,a,v,s(100#includevoid main()double l,w,r,a,v,s,x,y,x1,x2,y1,y2;printf( 请确定球台边框(l,w): ); scanf(%lf,%lf,&l,&w);printf( 请确定球心开始位置(x,y): );scanf(%lf,%lf,&x,&y); printf( 请确定球半径 r: ); scanf(%lf,&r);printf( 请确定射击角度 a: ); scanf(%lf,&a);printf( 请确定射击速度 v: ); scanf(%lf,&v);printf( 请确定时间 s: ); scanf(%lf,&s);x1=r;x2=l-r;y1=r;y2=w-r;x=x+v*s*cos(a*3.1415926/180);y=y+v*s*sin(a*3.1415926/180);while(xx2 | yy2)if(xx2) x=2*x2-x;if(xy2) y=2*y2-y;if(y#includevoid main()double l,w,r,a,b,v,s,x,y,x1,x2,y1,y2;printf( 请确定球台边框(l,w): ); scanf(%lf,%lf,&l,&w);printf( 请确定球心开始位置(x,y): ); scanf(%lf,%lf,&x,&y); printf( 请确定球半径 r: ); scanf(%lf,&r);printf( 请确定射击角度 b: ); scanf(%lf,&b);printf( 请确定射击初速度 v: ); scanf(%lf,&v);printf( 请确定匀减速的加速度 a: ); scanf(%lf,&a);x1=r;x2=l-r;y1=r;y2=w-r;s= v*v/2/a;x=x+s*cos(b*3.1415926/180);y=y+s*sin(b*3.1415926/180);while(xx2 | yy2)if(xx2) x=2*x2-x;if(xy2) y=2*y2-y;if(y1) ,求出其平方数 s;计算 a 的位数 w,同时计算 b=10w,a 的平方 s 的尾部 c=s%b;比较 a,c,若 a=c 则输出守形数。(2) 程序实现/ 求x,y内的守形数 #includevoid main()long int a,b,c,k,s,x,y;printf( 求区间x,y中的守形数.);printf( 请输入整数 x,y:);scanf(%ld,%ld,&x,&y);for(a=x;a0)b=b*10;k=k/10;c=s%b; / c 为 a 的平方数 s 的尾部 if(a=c)printf(%ld2=%ld n,a,s);(3) 程序运行结果求区间x,y中的守形数.请输入整数 x,y:10,10000252=625762=57763762=1413766252=39062593762=879093762. 探索 n 位守形数 (1) 求解要点为了求更多位数的守形数,可应用守形数的性质:一个 m 位守形数的尾部m-1 位数也是一个守形数。道理很简单,a 是一个 m 位数,a 的平方数尾部的 m-1 位仅由 a 的尾部 m-1位决定而与 a 的其他位无关。 实施易知一位守形数有三个:1,5,6。则二位守形数的个位数字只可能是1,5,6 这三个数字。根据这一思路,我们可应用递推求出多位守形数。(2) 程序设计/ 求 n 位守形数 #includevoid main() int n,d,k,j,i,t,m,w,z,u,v,a500,b500,c500;printf(n=);scanf(%d,&n);for(d=1;d=1;k-)printf(%d,ak);printf(n);(3) 程序运行示例运行程序, 输入 n=30,得 30 位守形数5 结尾的 30 守形数: 1066199773922562599182128906256 结尾的 30 守形数: 89338002260774374008178710937641 奇数序列运算式在由指定相连奇数组成的序列的每相邻两项中插入运算符号:若相邻两项都是合数,则两项中插入“-”号;若相邻两项一项合数一项素数,则两项中插入“+”号;若相邻两项都是素数,则两项中插入乘号“*”号;输入奇数 b,c(b#include void main()int b,c,f,m,n,k,i,j,aN; long t,s;printf( 请输入首尾奇数 b,c(b#include void main()int i,j,m,n,t,s,z,a2020;printf( 输入方阵阶 n:);scanf(%d,&n);printf( 方阵有以下两种旋转方式:n);printf( 1: 逆时针转 2: 顺时针转n);printf( 选择旋转方式代码: ); scanf(%d,&z);m=n/2;t=0;am+1m+1=n*n;for(i=1;i=m;i+) / 按规律给 a 数组赋值 s=n+1-2*i;for(j=i;j=n-i;j+)aij=t+1-i+j;ajn+1-i=t+s+1+j-i;an+1-ij+1=t+3*s-j+i;aj+1i=t+4*s-j+i;t=t+4*s;printf( 所求旋转方阵为:);for(i=1;i=n;i+)printf(n);for(j=1;j=n;j+) / 按座标输出方阵 if(z%2=0)printf(%4d,aij);elseprintf(%4d,aji);(3) 程序运行示例与变通输入方阵阶 n:7方阵有以下两种旋转方式:1: 逆时针转 2: 顺时针转选择旋转方式代码: 1所求旋转方阵为:1 24 23 22 21 20 192 25 40 39 38 37 183 26 41 48 47 36 174 27 42 49 46 35 165 28 43 44 45 34 156 29 30 31 32 33 147 8 9 10 11 12 13输入方阵阶 n:8方阵有以下两种旋转方式: 1: 逆时针转 2: 顺时针转选择旋转方式代码: 2所求旋转方阵为:1 2 3 4 5 6 7 828 29 30 31 32 33 34 927 48 49 50 51 52 35 1026 47 60 61 62 53 36 1125 46 59 64 63 54 37 1224 45 58 57 56 55 38 1323 44 43 42 41 40 39 1422 21 20 19 18 17 16 15程序变通:把程序中的输出量 aij 改变为 n*n-aij+1,可输出由内到外的旋转方阵。43 n!精确计算定义 n!=1*2*3*n输入正整数 n(=100),精确计算并输出 n!(若大于 10 位时输出其高 10 位)测试数据:n=30n=10044 分数数列老师为了检测学生的观察分析能力与程序设计水平,写出一个递推分数数列的前 6 项: 1/2, 3/5, 4/7, 6/10, 8/13, 9/15, .,引导学生注意观察数列的构成规律:第 i 项的分母 d 与分子 c存在以下关系:d=c+i.而 c 为与前 i-1项中的所有分子、分母均不相同的最小正整数。试求出该数列的第 n 项,并求出前 n 项中的最大项。测试数据:(1) n=1000(2) n=201245 双和数组把一个偶数 2s 分解为 6 个互不相等的正整数 a,b,c,d,e,f,然后把这 6 个正整数分成(a,b,c)与(d,e,f)两个组,若这两组数具有以下两个相等特性: fedcba11则把数组(a,b,c)与(d,e,f)称为基于 s 的双和数组(约定abc,def,ad) 。1) 存在双和数组, s 至少为多大?2) 当 s=98 时有多少个不同的双和数组?
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号