C++枚举练习

1、举例出小于某个数的所有质数

代码

#include<iostream>
using namespace std;
int main()
{
	int x;
	cin >> x;
	int con = 0;
	for (int i = 2; i <=x; i++)
	{
		int xp = i;
		bool t = true;
		for (int i = 2; i <= xp / 2; i++) {
			if (xp % i == 0) {
				t = false;
				break;
			}
		}
		if (t) {
			cout << xp<<endl;
			con++;
		}
	}
	cout <<"共计:"<< con;
	return 0;
}



代码运行

在这里插入图片描述

2、求某数到某数之间中为回文数且每位和为n的数。

示例

  1. 输入:10000 100000 8(表示10000-100000中每位相加等于8的回文数)
  2. 输出:
    10601
    11411
    12221
    13031
    20402
    21212
    22022
    30203
    31013
    40004

代码

#include<iostream>
using namespace std;

int check(int i ,int p) {
	int zhan[20];
	int weisum = 0;
	while (i)
	{
		zhan[weisum++] = i % 10;
		i /= 10;
	}
	for (int z = 0; z < weisum/2; z++)
	{
		if (zhan[z] != zhan[weisum - z - 1]) {
			return false;
		}
	}
	int sum = 0;
	for (size_t i = 0; i < weisum; i++)
	{
		sum += zhan[i];
	}
	if (sum != p) return false;
	else return true;
}

int main()
{
	int m, n;
	cin >> m >> n;
	int p;
	cin >> p;
	for (int i = m; i <=n; i++)
	{
		if (check(i,p)) {
			cout << i<<endl;
		}
	}
	return 0;
}



代码运行

在这里插入图片描述

3、避免“不幸运的”4

代码要求

求某个大小区间内中不含有数字“4”的数以及他们数量的总和。

代码

#include<iostream>
using namespace std;

int check(int i) {
	while (i) {
		if (i % 10 == 4) return false;
		i /= 10;
	}
	return true;
}

int main()
{
	int m, n;
	cin >> m >> n;//数字区间
	int sum = 0;
	for (int i = m; i <=n; i++)
	{
		if (check(i)) {
			cout << i<<" ";
			sum++;
		}
	}
	cout << endl << "共计:" << sum << "个";
	return 0;
}



代码运行

在这里插入图片描述

4、四平方定理(拉格朗日定理)

代码要求

四平方定理是指:每个正整数n都能被四个整数表示为:n * n=a * a + b * b + c * c+d * d。我们需要找到一个数它字典序列最小的一个四平方数。
例如 5=0 * 0+0 * 0+1 * 1+2 * 2。

代码

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

//四平方定理(拉格朗日定理)

int main()
{
	int x;
	cin >> x;
	int a, b, c;
	double d;
	for ( a = 0; a*a <=x ; a++)
	{
		for (b = a; a * a + b * b <= x; b++) 
		{
			for (c = b; a * a + b * b + c * c <= x; c++) 
			{
				d = sqrt(x - a * a - b * b - c * c);
				if (d == (int)d) //判断d是否为一个整数
				{
					cout << a<<" " << b<<" " << c<<" " << d;
					return 0;
				}
			}
		}
	}

}



代码运行

590=0+4+225+361
在这里插入图片描述

5、寻找最优和

代码要求

输入一系列数,求该序列数中和最大的序列。

示例

  1. 输入:5
    -1 2 -1 2 -1

  2. 输出:最大和为:3
    序列为:2 -1 2

代码

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

//寻找最优和
int shu[1005];
int main()
{
	int x;
	cin >> x;
	for (int i = 0; i < x; i++)
	{
		cin >> shu[i];
	}
	int sum, ang = 0;
	int xz, yz;
	for (int i = 0; i < x; i++)
	{
		sum = 0;
		for (int p = i; p < x; p++)
		{
			sum += shu[p];
			if (sum > ang) {
				ang = sum;
				xz = i;
				yz = p;
			}
		}
	}
	cout <<"最大和为:"<< ang<<endl<<"序列为:";
	for (int i = xz; i <=yz; i++)
	{
		cout << shu[i]<<" ";
	}
	return 0;
}

代码运行

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值