C++练习九

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;
}

 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值