第1关:判断一个数是否为完全平方数
本关必读
一个非负整数n
是完全平方数当且仅当存在非负整数m
,使得n = m * m
。注意,0
是完全平方数。
本关要求用for
循环语句来判断一个非负整数是否为完全平方数。其中:返回true
表示该非负整数n
是完全平方数,返回false
则表示该非负整数n
不是完全平方数。
本关任务
本关的编程任务是实现step1/CompleteSquare.cpp
文件中的IsSqrt
函数,代码如下:
// 判断一个数是否为完全平方数
bool IsSqrt(int n)
{
// 请在此添加实现代码
}
测试说明
本关的测试文件是step1/CompleteSquareTest.cpp
,负责对你写的实现代码进行测试。具体说明如下:
#include <iostream>
#include "CompleteSquare.h"
using namespace std;
int main()
{
int n;
// 从命令行读入一个int型数值
// 这个数取自测试集的输入
cin>>n;
if(IsSqrt(n))
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
}
上述main
函数从命令行读入,并将处理后的结果通过命令行输出。注意,step1/CompleteSquareTest.cpp
的代码不能被修改。
其中:CompleteSquare.h
文件代码如下:
#ifndef _ISLEAPYEAR_H_
#define _ISLEAPYEAR_H_
bool IsSqrt(int );
#endif
以下是平台对step1.CompleteSquareTest
的测试样例: 测试输入:10
预期输出:No
测试输入:25
预期输出:Yes
测试输入:100
预期输出:Yes
开始你的任务吧,祝你成功!
代码:
// 判断一个数是否为完全平方数
bool IsSqrt(int n)
{
// 请在此添加实现代码
if (n < 0)
return false;
for (int i = 0; i <= n / 2; i++) {
if (i * i == n)
return true;
}
return false;
}
第2关:统计用户输入的正整数m
和n
之间(包含m
和n
本身)有多少个数其各位数字之和是5
本关必读
本关要求用for
循环语句来统计用户输入的正整数m
和n
之间(包含m
和n
本身)有多少个数其各位数字之和是5
。其中:m
和n
都是3
位正整数。
本关任务
本关的编程任务是实现step2/SumOfThreeInt.cpp
文件中的Count
函数,代码如下:
// 统计m和n之间有多少个数其各位数字之和是5
int Count(int m, int n)
{
// 请在此填入实现代码
}
测试说明
本关的测试文件是step2/SumOfThreeIntTest.cpp
,负责对你写的实现代码进行测试。具体说明如下:
#include <iostream>
#include "SumOfThreeInt.h"
using namespace std;
int main()
{
int m, n;
// 从命令行读入两个int型数值
// 这两个数取自测试集的输入
cin >> m >> n;
cout << Count(m,n) << endl;
}
上述main
函数从命令行读入,并将处理后的结果通过命令行输出。注意,step2/SumOfThreeIntTest.cpp
的代码不能被修改。
其中:SumOfThreeInt.h
文件代码如下:
#ifndef _ISLEAPYEAR_H_
#define _ISLEAPYEAR_H_
int Count(int , int );
#endif
以下是平台对step2.SumOfThreeIntTest
的测试样例: 测试输入:189 289
预期输出:4
测试输入:12 34
预期输出:3
测试输入:142 913
预期输出:10
开始你的任务吧,祝你成功!
代码:
// 统计m和n之间有多少个数其各位数字之和是5
int Count(int m, int n)
{
int num1,num2,num3,count;
// 请在此添加实现代码
for(int i=m;i<=n;i++)
{
num1=i/100;
num2=i/10-num1*10;
num3=i%10;
if(num1+num2+num3==5)
{
count++;
}
}
return count;
}
第3关:计算n以内(不包含n)的所有质数之和
本关必读
质数,又称素数,指在一个大于1
的自然数中,除了1
和此整数自身外,无法被其他自然数整除的数(也可定义为只有1
和本身两个因数的数)。
100以内的质数:2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97。
本关要求用for
循环语句来实现。
本关任务
本关的编程任务是实现step3/SumOfPrime.cpp
文件中的SumOfPrime
函数,代码如下:
// 计算n以内(不包含n)的所有素数之和
int SumOfPrime(int n)
{
// 请在此提供实现代码
}
测试说明
本关的测试文件是step3/SumOfPrimeTest.cpp
,负责对你写的实现代码进行测试。具体说明如下:
#include <iostream>
#include "SumOfPrime.h"
using namespace std;
int main()
{
int n;
// 从命令行读入一个正整数n
// 这个数取自测试集的输入
cin >> n;
cout << SumOfPrime(n) << endl;
}
上述main
函数从命令行读入,并将处理后的结果通过命令行输出。注意,step3/SumOfPrimeTest.cpp
的代码不能被修改。
其中:SumOfPrime.h
文件代码如下:
#ifndef _ISLEAPYEAR_H_
#define _ISLEAPYEAR_H_
int SumOfPrime(int );
#endif
以下是平台对step3.SumOfPrimeTest
的测试样例: 测试输入:10
预期输出:17
测试输入:5
预期输出:5
测试输入:100
预期输出:1060
开始你的任务吧,祝你成功!
代码:
// 计算n以内(不包含n)的所有素数之和
int SumOfPrime(int n)
{
// 请在此添加实现代码
int i, k, sum = 0;
for (i = 2; i < n; i++)
{
bool flag = true;
for (k = 2; k <= i / 2; k++)
{
if (i % k == 0)
{
flag = false;
break;
}
}
if (flag)
sum += i;
}
return sum;
}
第4关:求两个数的最大公约数和最小公倍数
本关必读
最大公约数(英语:Greatest Common Divisor,简写为G.C.D.;或Highest Common Factor,简写为H.C.F.)是指某几个整数共有约数中最大的一个。如12
和18
的最大公约数为6
最小公倍数(英语:Lowest Common Multiple,简写为L.C.M.)是数论中的一个概念。若有一个数X
,可以被另外两个数A
、B
整除,且X
大于(或等于)A
和B
,则X
为A
和B
的公倍数。A
和B
的公倍数有无限个,而所有的公倍数中,最小的公倍数就叫做最小公倍数。如12
和18
的最小公倍数为36
。
本关要求用for
循环语句来分别求两个正整数的最大公约数和最小公倍数。
本关任务
本关的编程任务是实现step4/GcdAndLcm.cpp
文件中的Gcd
和Lcm
函数,代码如下:
// 求两个正整数的最大公约数
int Gcd(int a,int b)
{
// 请在此提供实现代码
}
// 求两个正整数的最小公倍数
int Lcm(int a,int b)
{
// 请在此提供实现代码
}
测试说明
本关的测试文件是step4/GcdAndLcmTest.cpp
,负责对你写的实现代码进行测试。具体说明如下:
#include <iostream>
#include "GcdAndLcm.h"
using namespace std;
int main()
{
int m,n;
// 从命令行读入两个正整数
// 这两个数取自测试集的输入
cin >> m >> n;
cout << Gcd(m,n) << " " << Lcm(m,n) << endl;
}
上述main
函数从命令行读入,并将处理后的结果通过命令行输出。注意,step4/GcdAndLcmTest.cpp
的代码不能被修改。
其中:GcdAndLcm.h
文件代码如下:
#ifndef _ISLEAPYEAR_H_
#define _ISLEAPYEAR_H_
int Gcd(int ,int );
int Lcm(int ,int );
#endif
以下是平台对step4/GcdAndLcmTest.cpp
的测试样例: 测试输入:5 10
预期输出:5 10
测试输入:6 9
预期输出:3 18
测试输入:7 11
预期输出:11 77
开始你的任务吧,祝你成功!
代码:
// 求两个正整数的最大公约数
int Gcd(int a, int b)
{
int z = b;
while(a%b!=0)
{
z = a%b;
a = b;
b = z;
}
return z;
}
// 求两个正整数的最小公倍数
int Lcm(int n1,int n2){
int max = (n1 > n2) ? n1 : n2;
do
{
if (max % n1 == 0 && max % n2 == 0)
{
return max;
break;
}
else
++max;
} while (true);
}