信息学一本通 · 启蒙篇第 46 课

摘要:#include using namespace std;double f(double x,double y) { double res = 1; for(int i = 0; i < y; i++) res *= x; ret

练46.1 求 π 的值

解题思路:

定义一个函数表示 x 的 n 次方

定义一个函数表示 arctanx

#include using namespace std;double f(double x,double y) { double res = 1; for(int i = 0; i = 0.000002; i++) { double fm = i*2 - 1; double fz = f(p, fm); x = fz/fm; if(i%2 == 0) ans -= x; else ans += x; } return ans;}int main { double x = 6*solve(1.0/sqrt(3)); printf("%.10lf", x); return 0;}

46.2 求丑数

把只包含因子 2、3 和 5 的数为丑数。例如 6、8 都是丑数,但 14 不是,因为它包含因子 7。习惯上,我们把 1 当作是第一个丑数。

先定义一个判断丑数的函数,利用它输出 1∼100 之间所有的丑数,并统计出个数。

解题思路:

把输入的数除 2 、除 3、除 5,除完所有因子后若结果为 1 必定是丑数,否则不是丑数。

#includeusing namespace std;bool solve(int n) { while(n%2==0) n/=2; while(n%3==0) n/=3; while(n%5==0) n/=5; return n == 1;}int main{ int num=0; for(int i=1;i

46.3 哥德巴赫猜想

题目描述

输入一个整数 n,判断 4~n 之间的偶数分解成两个素数的和,不满足的偶数输出验证失败。

解题思路:

写一个质数判断的函数,枚举 2~偶数根号的数,如果有一个因子则不是素数,否则是素数。

#includeusing namespace std;int shusu(int x){ if(x>n; for(int i = 4; i

46.4 第 N 个智慧数

题目描述

智慧数:两个正整数的平方差。输入一个整数 n,输出第 n 个智慧数。

解题思路

循环嵌套枚举两个正整数,然后再作差,枚举到第 n 个智慧数立即输出。

#includeusing namespace std;bool check(int n) { for (int i = 2; i > n; for (int i = 1;; i++) { if (check(i)) s++; if (s == n) { cout

来源:远志教育

相关推荐