第一关

任务描述 本关任务:编写程序实现除法向上取整。 给定两个正整数$n,m$,$[n/m]$ 表示大于等于 $n/m$ 的最小整数。求$[n/m]$。

相关知识

为了完成本关任务,你需要掌握:除法整除,C++数学运算。

编程要求

根据提示,在右侧编辑器补充代码。

输入格式 一行,两个正整数n,m,(1<=n,m<=1000000000)。

输出格式 一行,表示答案

样例输入 3 2

样例输出 2

样例代码

#include <iostream>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    if (n%m==0) cout<<n/m;
    else cout<<n/m+1;
    return 0;
}

第二关

任务描述 本关任务:编程求点$(x_{0},y_{0})$到直线$Ax+By+C=0$的距离。

相关知识

为了完成本关任务,你需要掌握:

点到直线的距离公式 dist $=\frac{A x_{0}+B y_{0}+C}{\sqrt{A^{2}+B^{2}}}$ C++数学运算

编程要求

根据提示,在右侧编辑器补充代码。

输入格式 一行,五个整数 x0 y0 A B C。 保证所有输入的整数的绝对值不超过100。

输出格式 一行,输出距离,保留小数点后3位。

样例输入 1 1 1 1 0

样例输出 1.414

样例代码

#include <iostream>
#include <cmath>
#include  <iomanip>
using namespace std;

int main(void) {
    int x,y,a,b,c;
    cin>>x>>y>>a>>b>>c;
    double res = (a*x+b*y+c)/(sqrt(a*a+b*b));
    cout<<setiosflags(ios::fixed)<<setprecision(3)<<abs(res);
	return 0;
}

第三关

任务描述 本关任务:编写一个能计算圆面积并的小程序。

假设给定两个圆,第一个圆圆心为 $\left(x_{1}, y_{1}\right),$ 半径为 $r_{1},$ 第二个圆圆心为 $\left(x_{2}, y_{2}\right),$ 半径为 $r_{2}$ 。满足 $r_{1}+r_{2}>\sqrt{\left(x_{1}-x_{2}\right)^{2}+\left(y_{1}-y_{2}\right)^{2}}>\left r_{1}-r_{2}\right $ 。即两个圆相交的情况。计算两个圆的面积并。

相关知识

为了完成本关任务,你需要掌握:1.圆面积并的求法。2.C++数学运算。

圆面积并 注意可能存在两种情况。但是两种情况是可以合并的(即不需要分支语句)。 圆面积并 这里提供一个可行的思路: 首先把整体的面积为两个圆的面积和减去重合的部分。 重合的部分总是可以看成是两个扇形的和(哪两个?)减去两个三角形的和(哪两个?)。

C++数学运算 (cmath库)一些可能用得上的函数的原型:

double sqrt(double x); //求根
double sin(double x); //求sin(x)
double cos(double x); //求cos(x)
double tan(double x); //求tan(x)
double asin(double x); //求arcsin(x)
double acos(double x); //求arccos(x)
double atan(double x); //求arctan(x)
double atan2(double y, double x) //返回向量(x,y)与 x 轴的夹角(弧度)。取值范围为(-pi,pi]。 

编程要求

根据提示,在右侧编辑器补充代码。

输入格式 一行,六个正整数x1,y1,r1,x2,y2,r2。 保证全部输入不超过100。保证两圆相交。

输出格式 一行,输出面积并。保留小数点后3位小数。

样例输入 1 1 1 1 2 1

样例输出 5.055

样例代码

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main(void) {
    double pi = 3.1415926;
    int x1,y1,r1,x2,y2,r2;
    cin>>x1>>y1>>r1>>x2>>y2>>r2;
    double dist_o1_o2 = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
    double theta_1 = 2*acos((r1*r1+dist_o1_o2*dist_o1_o2-r2*r2)/(2*r1*dist_o1_o2));
    double theta_2 = 2*acos((r2*r2+dist_o1_o2*dist_o1_o2-r1*r1)/(2*r2*dist_o1_o2));
    double theta = acos((r2*r2+r1*r1-dist_o1_o2*dist_o1_o2)/(2*r2*r1));
    double s = 0.5*r1*r1*theta_1 + 0.5*r2*r2*theta_2 - sin(theta)*r1*r2;
    
    cout<<setiosflags(ios::fixed)<<setprecision(3)<<pi*r1*r1+pi*r2*r2-s;

	return 0;
}

第四关

任务描述 本关任务:编写一个程序,给定n,计算下面的式子。 $\sum_{i=1}^{n} \sum_{j=1}^{n} \min (i, j)+\sum_{i=1}^{n} \sum_{j=1}^{n} \max (i, j)$ 这是一道数学题,可以通过计算得到最后的结果,不需要使用循环。

相关知识

为了完成本关任务,你需要掌握:C++数学运算。

注意各类型的范围 一般情况下:

  • short为[-32768,32767],估算时可以简单记为±3e4;
  • int为[-2147483648,2147483647],估算时可以简单记为±2e9;
  • long long为[-9223372036854775808,9223372036854775807],估算时可以简单记为±9e18。

编程要求

根据提示,在右侧编辑器补充代码。

输入格式 一行,一个正整数n,保证n<=1000000(即1e6)。

输出格式 一行,输出答案。

样例输入 10

样例输出 1100

样例代码

#include <iostream>
#include <cmath>
using namespace std;

int main(void) {

/******** Begin ********/
    long long a;
    cin>>a;
    long long res = (1+a)*a*a;
    cout<<res;
/********  End  ********/

	return 0;
}