How to effectively improve math skills through 2018 UESTC Training for math?

2026-04-11 21:411阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计532个文字,预计阅读时间需要3分钟。

How to effectively improve math skills through 2018 UESTC Training for math?

α+主题地址 1. 题意:给定三个点,求可以构成的最小正n边形的边数。 2. 思路分析:先写出距离及角度的函数,方便后续处理;由余弦定理理解可求出这三条边对应的角。

How to effectively improve math skills through 2018 UESTC Training for math?

Ευκλειδης
原题地址
1. 题意:给定三个点,求可以构成的最小正n边形的边数。
2. 思路分析:

先把距离以及角度的函数写出,方便以后处理;

由余弦定理可以求出这三条边对应的角度。对于正 n 边形,每个圆心角为 1/n 2 pi,当我们用每条边对应的圆心角/3~1000内的多边形的圆心角,如果可以整除,那么就是最小的边数。注意:我们求的角度是圆周角=圆心角/2.

#include <bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define maxn 200005 const int mod=1e9+7; #define eps 1e-6 #define pi acos(-1.0) bool zero(double n){ return n<eps&&n>-eps; } double dis (double x1,double y1,double x2,double y2){ return sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); } double ang(double a,double b,double c){ return acos( (a*a+b*b-c*c)/(2*a*b) ); } bool check (double n){ return zero(n-(int)(n+0.5)); } ll quipow(ll a,ll b){ ll ans=0; while(b>0){ if(b%2)ans=ans*a; b=b/2; a=a*a; } return ans; } int main(){ double x[3],y[3],a,b,c,A,B,C; int i,j; for(i=0;i<3;i++){ cin>>x[i]>>y[i]; } a=dis(x[0],y[0],x[1],y[1]); b=dis(x[0],y[0],x[2],y[2]); c=dis(x[1],y[1],x[2],y[2]); A=ang(a,b,c)/pi; B=ang(b,c,a)/pi; C=ang(c,a,b)/pi; for(i=3;i<=2000;i++){ if(check(A*i)&&check(B*i)&&check(C*i))break; } cout<<i<<endl; }

本文共计532个文字,预计阅读时间需要3分钟。

How to effectively improve math skills through 2018 UESTC Training for math?

α+主题地址 1. 题意:给定三个点,求可以构成的最小正n边形的边数。 2. 思路分析:先写出距离及角度的函数,方便后续处理;由余弦定理理解可求出这三条边对应的角。

How to effectively improve math skills through 2018 UESTC Training for math?

Ευκλειδης
原题地址
1. 题意:给定三个点,求可以构成的最小正n边形的边数。
2. 思路分析:

先把距离以及角度的函数写出,方便以后处理;

由余弦定理可以求出这三条边对应的角度。对于正 n 边形,每个圆心角为 1/n 2 pi,当我们用每条边对应的圆心角/3~1000内的多边形的圆心角,如果可以整除,那么就是最小的边数。注意:我们求的角度是圆周角=圆心角/2.

#include <bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define maxn 200005 const int mod=1e9+7; #define eps 1e-6 #define pi acos(-1.0) bool zero(double n){ return n<eps&&n>-eps; } double dis (double x1,double y1,double x2,double y2){ return sqrt( (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); } double ang(double a,double b,double c){ return acos( (a*a+b*b-c*c)/(2*a*b) ); } bool check (double n){ return zero(n-(int)(n+0.5)); } ll quipow(ll a,ll b){ ll ans=0; while(b>0){ if(b%2)ans=ans*a; b=b/2; a=a*a; } return ans; } int main(){ double x[3],y[3],a,b,c,A,B,C; int i,j; for(i=0;i<3;i++){ cin>>x[i]>>y[i]; } a=dis(x[0],y[0],x[1],y[1]); b=dis(x[0],y[0],x[2],y[2]); c=dis(x[1],y[1],x[2],y[2]); A=ang(a,b,c)/pi; B=ang(b,c,a)/pi; C=ang(c,a,b)/pi; for(i=3;i<=2000;i++){ if(check(A*i)&&check(B*i)&&check(C*i))break; } cout<<i<<endl; }