问题描述
郭姐希望你帮他求F的值。
输入描述
多组测试样例。
每组样例一个大于3的正数n(4<=n<=1e9)
输出描述
每组测试样例输出一行。(结果保留12位小数)
样例输入
4
样例输出
0.250000000000
来源
第十二届中北大学程序设计竞赛
提示
嘻嘻,偷偷的告诉你,真白又在考郭姐数学了~
思路:
这道题如果分开计算等于4和不等于4 ,那么就会超时。所以这道题主要的是找到6/(n*(n-1)*(n-2))这个规律。
超时代码:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
double n, sum = 1 ;
int i;
while(scanf("%lf",&n)!=EOF){
double a = n;
if(n == 4){
sum = 1.0 * 1.0 / 4;
printf("%.12f\n",sum);
}else if(n>4){
for(i=1;i<n-3;i++){
sum *= i/a;
a--;
}
printf("%.12f\n",sum);
}
}
return 0;
}
正确代码:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
double n, sum = 0 ;
while(scanf("%lf",&n)!=EOF){
sum = 6/(n*(n-1)*(n-2));
printf("%.12f\n",sum);
}
return 0;
}