import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 0; i < n; i++) {
double h = scanner.nextDouble();
int t = scanner.nextInt();
//题意: 计算从小球H 高度下落到第n 次弹地往返的总路程
double sum =0;
for (int j = 0; j < t-1; j++) {
sum+=h*1.5;
h/=2;
}
sum+=h;
DecimalFormat f = new DecimalFormat("0.00");
System.out.println(f.format(sum));
}
}
} #include <stdio.h>
#include <math.h>
double getNum(double h,int th){ th=th*2-1; double result=0; for(int i=0;i<th;i++){ result=result+h; if(i%2==0){ h=h/2; } } return result;
}
int main(){ int n ; double h; int th; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%lf %d",&h,&th); printf("%.2lf\n",getNum(h,th)); } }
}
总路程次数:2*th-1
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i = 0;i<n;i++){
int h,m;
cin >> h >> m;
double ans = (double)h;
double hh = (double)h/2;
for(int i = 1 ;i<m;i++){
ans += (hh * 2);
hh/=2;
}
printf("%.2lf\n",ans);
}
}
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int h,n,m;
while(cin>>m){
for(int i=0;i<m;i++){
cin>>h>>n;
double res=3;
if(n==1){//如果只有1次,那就是H
res=1;
}
else{//否则就是1+1+1/2+1/4+...
res-=pow(0.5,n-2);
}
res*=h;
printf("%.2lf\n",res);
}
}
return 0;
}
#include <cstdio>
#include <iostream>
using namespace std;
double f(double h,double n){
if(n==1){
return h;
}else{
return h+h/2+f(h/2,n-1);
}
}
int main() {
int m;
scanf("%d",&m);
while(m--){
int h,n;
scanf("%d%d",&h,&n);
printf("%.2f\n",f(h,n));
}
} #include <iostream>
using namespace std;
int main() {
int m, h, n;
cin >> m;
while (m--) {
cin >> h >> n;
double sum = h, //往返的总路程
curh = h; //当前弹起高度(current height)
for (int i = 2; i <= n; i++) {
curh /= 2.0; //弹起高度减半
sum += 2 * curh; //总路程增量
}
printf("%.2lf\n", sum);
}
} #include<stdio.h>
float Height(int H,int n)
{
float HH=0,h;
float RH=(float)H;
for(int i=1;i<=n;i++)
{
h=RH;
RH=0.5*RH;
HH=HH+h+RH;
}
return (HH-RH);
}
int main()
{
int a[100][2],m,i;
float H[100];
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d %d",&a[i][0],&a[i][1]);
H[i]=Height(a[i][0],a[i][1]);
}
for(i=0;i<m;i++)
printf("%.2f\n",H[i]);
return 0;
} 最后一次着地不算弹起返回import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
for (int i = 0; i < m; i++){
int N = sc.nextInt();
int n = sc.nextInt();
System.out.printf("%.2f\n", func(N, n));
}
sc.close();
}
public static double func(double N, int n){
return (n == 1) ? N : (2 * N / Math.pow(2, n-1) + func(N, n-1));
}
} 利用递归
#include<stdio.h>
(737)#include<string.h>
#include<stdlib.h>
(794)#include<math.h>
int main()
{
int n;
scanf("%d", &n);
double a[5][2];
double b[5] = { 0 };
for (int i = 0; i < n; i++) {
scanf("%lf%lf", &a[i][0], &a[i][1]);
b[i] = a[i][0];
}
for (int i = 0; i < n; i++)
{
for (int j = 1; j < a[i][1]; j++) {
a[i][0]= a[i][0] / 2;
b[i] +=2*a[i][0];
}
}
for (int i = 0; i < n; i++)
printf("%.2lf\n", b[i]);
} #include<stdio.h>
#include<math.h>
int main()
{
int m;
while(!scanf("%d",&m))
while(getchar()!='\n')
continue;
int i,h,n;
float distance,temp;
for(i=0;i<m;i++)
{
scanf("%d %d",&h,&n);
temp=pow(0.5,n);
distance=(float)2*h*(1-temp)*2-h;//等比数列求和
printf("%.2f\n",distance);
}
return 0;
} #include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int m;
cin>>m;
while(m-- > 0)
{
int n, i;
double H;
cin>>H>>n;
double sum = 0;
sum += H;
H /= 2.0;
for(i=2; i<=n; i++)
{
sum += H * 2;
H /= 2.0;
}
cout<<fixed<<setprecision(2)<<sum<<endl;
}
return 0;
} #include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
cin >> n;
float datas[n][2];
float results[n];
for(int h = 0;h<n;h++)
{
for(int p = 0;p<2;p++)
{
cin>>datas[h][p];
}
}
for(int i = 0;i<n;i++)
{
float sum = 0;
float distance = datas[i][0];
for(float k = 1;k<datas[i][1];k++)
{
distance = distance / 2;
sum = sum + distance*2;
}
results[i] = sum + datas[i][0];
}
for(int l = 0;l<n;l++)
{
cout<<setiosflags(ios::fixed)<<setprecision(2)<<results[l]<<endl;
}
} import java.util.Scanner;
import java.text.DecimalFormat;
public class Main{
public static void distance(){
DecimalFormat df = new DecimalFormat("#.00");
Scanner s = new Scanner(System.in);
int times = s.nextInt();
for (int i=0;i<times;i++){
double M = s.nextDouble();
int N = s.nextInt();
// System.out.printf("%.2f",M+2*M*(1-Math.pow(2,1-N)));
System.out.println(df.format(M+2*M*(1-Math.pow(2,1-N))));
}
}
public static void main(String[] args) {
distance();
}
}
这个题太***....用printf不通过,非得用DecimalFormat