蓝桥杯-数的分解

该博客主要讨论蓝桥杯竞赛中的一道问题,即如何将给定数字分解为三个互不相同且不含特定数字的正整数之和。文章详细分析了当目标数为三的倍数、三的倍数加一、三的倍数加二时,求解的不同策略,并提供了相应的代码片段来确定不同分解方法的数量。
摘要由CSDN通过智能技术生成

目录

【问题描述】

代码

target如果是三的倍数(三个数字不能有相同):

target如果是三的倍数+1(前提同上)

target如果是三的倍数+2(前提同上)


【问题描述】

把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,
一共有多少种不同的分解方法? 
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,
在提交答案时只填写这个整数,填写多余的内容将无法得分。

代码

我们只需要注意i的最大值,j的起始值,i<j<k即可

1)其次,注意题目条件--i,j,k互不相同

2)数字中不可包括2,4

#include<iostream>

using namespace std;

bool judge(int i, int j, int k)
{
	if (i == j || i == k || j == k)	return false;
	int temp;
	bool flag = true;
	while (i)
	{
		temp = i % 10;
		if (temp == 2 || temp == 4)	return false;
		i = i / 10;
	}
	while (j)
	{
		temp = j % 10;
		if (temp == 2 || temp == 4)	return false;
		j = j / 10;
	}
	while (k)
	{
		temp = k % 10;
		if (temp == 2 || temp == 4)	return false;
		k = k / 10;
	}
	return true;
}

int fenjie(int target)
{
	int count = 0;
	for (int i = 1; i <= target / 3; ++i)
	{
		for (int j = i; j <=(target-i)/2 ; ++j)
		{
			for (int k = j; k <= target; k++)
			{
				if (i + j + k == target&&judge(i,j,k)) {
					cout<<"i:"<<i<<",j="<<j<<",k="<<k<<endl;
					count++;
					
				}
				else continue;
			}
		}
	}
	return count;
}

int main()
{
	int target;
	cin >> target;
	int count = fenjie(target);
	cout << "count=" << count;
	return 0;
}

对于起始值target而言:

target如果是三的倍数(三个数字不能有相同):

 i的最大值:target/3-1

j的最小值:target/3+1

k的最小值:target/3+2

target如果是三的倍数+1(前提同上)

i的最大值:target/3-1

j的最小值:target/3

k的最小值:target/3+1

target如果是三的倍数+2(前提同上)

i的最大值:target/3-1

j的最小值:target/3

k的最小值:target/3+2

我们观察上面三种情况就会发现我们令k=j+1的情况其实在第三种中不是合理的,但是没有关系,反正呢最后也会因为数值累加后没有到target,直接跳入下一次循环.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shallow_Carl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值