题目地址:牛客网
第一题
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?(n<=10)
思路: 模拟。用两个值分别记录小球总路线长度和每次弹起来的高度。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
double ans=100;
double ans1=0;
while(n)
{
ans1=ans1+ans;
ans=ans/2;
n--;
if(n!=0)ans1=ans1+ans;
}
printf("%.6f %.6f\n",ans1,ans);
//cout<<ans1<<" "<<ans<<endl;
}
return 0;
}
第二题:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
思路: 也是模拟。用一个struct标记每个值,如果数到3时是这个数字,则标记为0,最后输出是1的数字即可。
代码:
#include<iostream>
using namespace std;
struct r{
int num;
int z;
}a[1000001];
int main()
{
int n;
while(cin>>n)
{
if(n==1){
cout<<1<<endl;break;}
for(int i=1;i<=n;i++)
{
a[i].num=i;
a[i].z=1;
}
int t=0;
int i=1;
int c=1;
while(t<n-1)
{
if(a[i].z==0){
i++;
if(i==n+1

7955

被折叠的 条评论
为什么被折叠?



