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