程序设计竞赛基础实训Word文档格式.docx
- 文档编号:15898446
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:13
- 大小:30.64KB
程序设计竞赛基础实训Word文档格式.docx
《程序设计竞赛基础实训Word文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计竞赛基础实训Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
360,1<
=v,s<
=105),含义见题目描述。
L=W=x=y=R=a=v=s=0表示输入结束,你的程序不应当处理这一行。
输出
对于每组数据,输出仅一行,包含两个实数x,y,表明球心坐标为(x,y)。
x和y应四舍五入保留两位小数。
样例输入
样例输出
1001008010590223
1101007010518019999
00000000
80.0056.00
71.0010.00
设计要点:
(1)确定球心区域
设球心座标为(x,y),则有球心矩形区域:
x1≤x≤x2,y1≤y≤y2
其中:
x1=r,x2=l-r。
y1=r,y2=w-r
(2)没撞击时球位置
设开始时球心位于(x0,y0),球沿极角为a的射线射出,球的速率为v,s个时间单位之后球心在(x,y):
x=x0+v*s*cos(a*3.14159/180)
y=y0+v*s*sin(a*3.14159/180)
(3)撞击轴对称
若球与右竖边(x2)撞击,撞击后横月座标为:
x=2*x2-x
若球与上横边(y2)撞击,撞击后纵月座标为:
y=2*y2-y
程序设计:
//台球碰撞
#include<
math.h>
#include<
stdio.h>
voidmain()
{
doublel,w,r,a,v,s,x,y,x1,x2,y1,y2。
printf("
请确定球台边框(l,w):
"
)。
scanf("
%lf,%lf"
&
l,&
w)。
请确定球心开始位置(x,y):
x,&
y)。
请确定球半径r:
%lf"
r)。
请确定射击角度a:
a)。
请确定射击速度v:
v)。
请确定时间s:
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(x<
x1||x>
x2||y<
y1||y>
y2)
{if(x>
x2)x=2*x2-x。
if(x<
x1)x=2*x1-x。
if(y>
y2)y=2*y2-y。
if(y<
y1)y=2*y1-y。
}
所求位置为:
(%.2f,%.2f).\n"
x,y)。
请确定球台边框(l,w):
130,110
30,40
5
30
20
(113.59,40.00).
引申:
有一个球心在(x,y),半径为r的圆形母球放在台球桌上(整个球都在台球桌内)。
与正半轴逆时针旋转到此射线的角度为b)以初速度v飞出。
解:
球作的初速度为v0,加速度为a的匀减速率运动,设t时刻球的速度为vt,则
vt=v0-a*t
停止时vt=0,则运行时间为:
t=v0/a
球运行距离为s=v0*t-a*t*t/2=v0*v0/2/a
doublel,w,r,a,b,v,s,x,y,x1,x2,y1,y2。
请确定射击角度b:
b)。
请确定射击初速度v:
请确定匀减速的加速度a:
s=v*v/2/a。
x=x+s*cos(b*3.1415926/180)。
y=y+s*sin(b*3.1415926/180)。
球停止时球心所求位置为:
180,120
35,40
27
6
(87.61,70.37).
40守形数
若正整数n是它平方数的尾部,则称n为守形数,又称同构数。
例如,6是其平方数36的尾部,76是其平方数5776的尾部,6与76都是守形数。
试求出指定区间[x,y]内所有守形数。
测试数据:
(1)x=10,y=10000,输出:
(2)x=10000,y=1000000,输出:
1.常规求解
(1)设计要点
对指定范围[x,y]内的每一个整数a(约定a>
1),求出其平方数s;
计算a的位数w,同时计算b=10^w,a的平方s的尾部c=s%b;
比较a,c,若a=c则输出守形数。
(2)程序实现
//求[x,y]内的守形数
{longinta,b,c,k,s,x,y。
求区间[x,y]中的守形数."
请输入整数x,y:
"
%ld,%ld"
for(a=x。
a<
=y。
a++)
{s=a*a。
//计算a的平方数s
b=1。
k=a。
while(k>
0)
{b=b*10。
k=k/10。
}
c=s%b。
//c为a的平方数s的尾部
if(a==c)
%ld^2=%ld\n"
a,s)。
(3)程序运行结果
求区间[x,y]中的守形数.请输入整数x,y:
10,10000
25^2=625
76^2=5776
376^2=141376
625^2=390625
9376^2=87909376
2.探索n位守形数
(1)求解要点
为了求更多位数的守形数,可应用守形数的性质:
一个m位守形数的尾部m-1位数也是一个守形数。
道理很简单,a是一个m位数,a的平方数尾部的m-1位仅由a的尾部m-1位决定而与a的其他位无关。
实施易知一位守形数有三个:
1,5,6。
则二位守形数的个位数字只可能是1,5,6这三个数字。
根据这一思路,我们可应用递推求出多位守形数。
(2)程序设计
//求n位守形数
{intn,d,k,j,i,t,m,w,z,u,v,a[500],b[500],c[500]。
n="
scanf("
%d"
n)。
for(d=1。
d<
=9。
d++)
{for(k=1。
k<
=500。
k++)
{a[k]=0。
b[k]=0。
c[k]=0。
a[1]=d。
//给个位数赋值
for(k=2。
=n。
{for(j=0。
j<
j++)
{a[k]=j。
v=0。
for(i=1。
i<
=k。
i++)c[i]=0。
//探索a(k)
i++)
{for(z=0,t=1。
t<
t++)
{u=a[i]*a[t]+z。
z=u/10。
b[i+t-1]=u%10。
//计算平方
for(w=0,m=i。
m<
m++)
{u=c[m]+b[m]+w。
w=u/10。
c[m]=u%10。
if(a[i]!
=c[i])v=1。
if(v==0)break。
if(v==0&
&
a[n]!
=0)//输出n位守形数结果
{printf("
%d结尾的%d守形数:
a[1],n)。
for(k=n。
k>
=1。
k--)
a[k])。
printf("
\n"
(3)程序运行示例
运行程序,输入n=30,得30位守形数
5结尾的30守形数:
1066199773922562599
6结尾的30守形数:
893380022607743740081787109376
41奇数序列运算式
在由指定相连奇数组成的序列的每相邻两项中插入运算符号:
若相邻两项都是合数,则两项中插入“-”号;
若相邻两项一项合数一项素数,则两项中插入“+”号;
若相邻两项都是素数,则两项中插入乘号“*”号;
输入奇数b,c(b<
c),完成[b,c]中奇数序列的运算式,并计算该式的运算结果。
例如b=31,c=45,完成运算式为:
31+33-35+37+39+41*43+45=1913
(1)b=3,c=51
(2)b=2011,c=2029
//奇数序列运算式
#defineN30000
{i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 竞赛 基础
