2008“缤纷下沙校园文化活动月”之大学生程序设计竞赛暨新生专场
题目大意:给你一个公式,和其中的s,u的值,根据公式计算出v的值,
最后输出 v*u-s*u-s*v 的值
思路:直接按题意做也可以找规律证明结论
根据arctan(1/s) = arctan(1/u)+arctan(1/v)
arctan(1/v) = arctan(1/s) - arctan(1/u)
tan(arctan(1/s) - arctan(1/u)) = 1/v
tan(arctan(1/s))-tan(arctan(1/u)) = 1/v
1+tan(arctan(1/s))tan(arctan(1/u))
即:1/s - 1/u = (1/v)*(1+1/(s*u))
得:v*u-s*u-s*v ≡ 1
普通代码:
#include<stdio.h> #include<math.h> int main() { double s,u,v; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf",&u,&s); double u_1 = atan(1.0/u); double s_1 = atan(1.0/s); double v_1 = tan(s_1-u_1); v = 1.0/v_1; int ans = floor((v-s)*u - s*v + 0.1); printf("%d\n",ans); } return 0; }数学证明后:
#include<stdio.h> //选择G++,C++报错 int main() { double s,u,v; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf",&u,&s); printf("1\n"); } return 0; }