1. 素数判断
【问题描述】
编写判断一个大于3的整数是否为素数的函数,是素数返回true,否则返回false。主函数调用该函数对用户输入的整数进行是否为素数的判断,并输出判断结果。
【输入形式】
197
【输出形式】
1
【样例输入】
204
【样例输出】
0
#include<iostream>
#include<cmath>
using namespace std;
bool prime(int a)
{
for (int i = 2; i <= sqrt(a); i++)
{
if (a % i == 0)
return 0;
}
return 1;
}
int main()
{
int a;
cin >> a;
cout << prime(a);
return 0;
}
2. 正整数m、n间的相亲数
【问题描述】
2500年前数学大师毕达哥拉斯就发现,正整数数对220和284之间存在着奇妙的联系: 220的因数之和(除了自身之外的因数)为1+2+4+5+10+11+20+22+44+55+110=284,而284的因数之和则为1+2+4+71+142=220。毕达哥拉斯把这样的数对称为相亲数(注意:构成相亲数的两个数不等。一个为雄数,另一个称为雌数)。编程求M和N(M、N为大于1并且在unsigned表示范围内)之间的所有相亲数。M、N由用户从键盘上输入。
【输入形式】
用户输入两个正整数保存到M和N中,以一个空格分隔,如:
100 300
【输出形式】
程序找出M到N间的各相亲数并输出。各相亲数的输出格式:先输出该相亲数是M到N间的第几个相亲数,再输出该相亲数中的雌、雄数及其因子计算式。雌雄数输出时分别各占一行,输出时先输出雌雄数的值,再输出英文冒号“:”,再从1开始输出各因数相加的公式,最后输出英文等号“=”和所有因数之和。注意:所有输出因素间无空格。各相亲数间空一行间隔输出。
【样例输入】
100 300
【样例输出】
1
220:1+2+4+5+10+11+20+22+44+55+110=284
284:1+2+4+71+142=220
【样例说明】
样例中1表示100~300间第1对相亲数。220和284是构成这对相亲数中的雌雄数,注意它们的输出格式。
#include<iostream>
#include<cstring>
using namespace std;
int fun(int x)
{
int p = 0;
for (int i = 1; i < x; i++)
{
if (x % i == 0)
p = p + i;
}
return p;
}
void show(int i)
{
cout << i << ':' << 1;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
cout << '+' << j;
}
}
cout << '=' << fun(i) << endl;
}
int main()
{
int m, n;
cin >> m >> n;
int count = 0;
int flag[10000];
memset(flag, 0, sizeof(flag));
for (int i = m; i <= n; i++)
{
if (flag[i - m] == 1)
continue;
if (i == fun(fun(i))&& i!=fun(i))
{
flag[fun(i) - m] = 1;
count++;
cout << count << endl;
show(i);
show(fun(i));
}
}
return 0;
}
3. 求1! ~n! 的值
【问题描述】
输入一个正整数n,生成一张阶乘表,输出1! ~n! 的值。要求定义和调用函数fact(n)计算n!,函数类型为double。
【输入形式】
从键盘输入一个正整数n。
【输入输出样例1】(下划线部分表示输入)
Enter n: 3
1!=1
2!=2
3!=6
【样例说明】
输入提示符后要加一个空格。其中:后要加一个且只能一个空格。
输出语句的=两边无空格。
英文字母区分大小写。必须严格按样例输入输出。
#include<iostream>
using namespace std;
double fact(int n)
{
if (n == 1)
return 1;
return n * fact(n - 1);
}
int main()
{
int n;
cout << "Enter n: ";
cin >> n;
for (int i = 1; i <= n; i++)
{
cout << i << '!' << '=' << fact(i);
cout << endl;
}
return 0;
}
4. 编程题《验证歌德巴赫猜想》
【问题描述】
验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如,6=3+3,8=3+5,......,18=5+13。要求将6~100之间的偶数都表示为两个素数之和,输出时一行输出五组。
【输入形式】
无输入
【输出形式】
按从小到大、每组五行
每组的格式为:四位=2位+2位。
等号和加号两侧无空格。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
bool prime(int a)
{
for (int i = 2; i <= sqrt(a); i++)
{
if (a % i == 0)
return 0;
}
return 1;
}
int main()
{
int count = 0;
for (int i = 6; i <= 100; i += 2)
{
for (int k = 2; k <= i/2; k++)
{
if (prime(k))
{
int l = i - k;
if (prime(l))
{
count++;
cout << setw(4) << i << '=' << setw(2) << k << '+' << setw(2) << l;
if (count % 5 == 0)
cout << endl;
break;
}
}
}
}
return 0;
}
5. 《求余弦函数的近似值》
【问题描述】
输入精度e 和实数x,用下列公式求cos x 的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funcos(e,x)求余弦函数的近似值。
【输入形式】
输入两个浮点数:精度e和实数x
【输入输出样例1】(下划线部分表示输入)
e: 0.001
x: 1
cos(x)=0.540
【样例说明】
输入提示符后要加一个空格。例如e: ;,其中:后要加一个且只能一个空格。
输出语句的=两边无空格
计算结果保留3位小数
英文字母区分大小写。必须严格按样例输入输出。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double funcos(double e,double x)
{
double pi = 3.1415;
int n = 0, b = 1;
double a = 1, sum = 1;
if (x > 2 * pi)
x = x - floor(x / 2 / pi) * 2 * pi;
while (fabs(a) >= e)
{
n = n + 2;
b = b * n * (n - 1) * (-1);
a = pow(x, n) / b;
sum = sum + a;
if (n > 8)
break;
}
return sum;
}
int main()
{
double e, x;
cout << "e: ";
cin >> e;
cout << "x: ";
cin >> x;
cout << "cos(x)=" << fixed << setprecision(3) << funcos(e, x);
return 0;
}