#
这道题目的意思是,给你一个长为a宽为b的球桌,现在给它一个初速度,使得它在若干次碰撞后回到初始位置(题目里默认为小桌的中心)
现在告诉你小球和垂直边碰撞的次数m,以及和水平边碰撞的次数n,还有整个过程的时间s,让你求出碰撞的初速度以及出球的角度;
列方程求解:
b*n=v*sin(θ)*s
a*m=v*cos(θ)*s
所以得到
tan(θ)=(b*n)/(a*m);
可解出θ;
然后在代入原方程求解v即可;
#include<iostream>
#include<cmath>
using namespace std;
const double Pi=3.141592653;
int main ()
{
double a,b,s,m,n;
while(scanf("%lf%lf%lf%lf%lf",&a,&b,&s,&m,&n))
{
if(a==0&&b==b&&s==0&&m==0&&n==0)
break;
double degree;
double resultdegree;
degree=atan(b*n/(a*m));
resultdegree=atan(b*n/(a*m))/Pi*180;
double v;
v=(b*n)/(sin(degree)*s);
printf("%.2lf %.2lf\n",resultdegree,v);
}
system("pause");
return 0;
}
这个题居然要用到三维坐标,太神奇了~
这个代码其实我也是借鉴网上牛人写的,感觉写的非常好,略作修改之后就拿过来了;
至于那个坐标公式,还有一小部分没有弄懂,下次可以继续研究下呵;
每个点都可以用三向坐标来表示
最短路径=两点各坐标差的绝对值之和决定的。用三向坐标
表示后,你会发现最短路径总是穿过3种线段,步数=各线段和=坐标差之和.有时侯把图转过几个角度或把元素分分类或掠取几条线都可能有新发现。
以上转自:
http://hi.baidu.com/sunshine_0316/blog/item/834b3f39b58f3622b9998f6f.html
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n1,n2;
int i,alevel,aright,aleft,blevel,bright,bleft,steps;
scanf("%d%d",&n1,&n2);
alevel=1;
blevel=1;
for(i=1;;i=i+2)
{
if(n1-i<=0)
{
aright=(i-n1)/2+1;
aleft=(n1+1)/2;
break;
}
alevel++;
n1=n1-i;
}
for(i=1;;i=i+2)
{
if(n2-i<=0)
{
bright=(i-n2)/2+1;
bleft=(n2+1)/2;
break;
}
blevel++;
n2=n2-i;
}
steps=abs(alevel-blevel)+abs(aleft-bleft)+abs(aright-bright);
printf("%d\n",steps);
return 0;
}
这道题和3620基本上是一样的,记得当是我做3620的时候,收获真是大啊,不过现在只能用水题来形容这道3051了,呵呵。
要让更多的题目成为水题,这也是我的目标;
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
char input[2000][2000];
int val[2000][2000];
int num;
void dfs(int x,int y)
{
if(val[x][y]==0)
return;
else if(val[x][y]==1)
{
val[x][y]=0;
num++;
dfs(x,y+1);
dfs(x+1,y);
dfs(x,y-1);
dfs(x-1,y);
}
}
int main ()
{
int w,h;
int i,j;
char temp;
int max=0;
num=0;
scanf("%d%d",&w,&h);
cin.ignore();
for(i=1;i<=h;i++)
{
for(j=1;j<=w;j++)
{
cin>>temp;
if(temp=='*')
val[i][j]=1;
else
val[i][j]=0;
}
}
for(i=1;i<=h;i++)
{
for(j=1;j<=w;j++)
{
num=0;
dfs(i,j);
if(num>max)
max=num;
}
}
printf("%d\n",max);
return 0;
}
摘要: 题目大意:这道题是中文的,题意就略了吧;我的思路是:先把字符串里面的-过滤掉,然后再用转换函数,将字符映射到响应的数字,然后排序,记录,输出结果;开始我本来打算用map容器来做这个题的,可是discuss里面说这个方法容易超时,所以最后还是选用了if语句,虽然长一点但是保证效率,呵呵;心得嘛,我发现百度上写的那篇关于sscanf用法的文章有误,我在这里给它修正一下,那里提到过周星星同学的用法,里面...
阅读全文