2018年大华软件创新挑战赛-模拟题3-魔法数字

本文介绍了一种用于检测特殊正整数的算法,通过将数字分割并比较两边数字之和来判断其是否符合条件。该算法使用C++实现,并详细解释了其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:有一种特殊的正整数(int类型),将数分为两侧,每侧至少有一位数,两侧的每个数字相加相等,请写出判断的方法用来检测是否这种数。

比如:1236,可以拆分为123和6。

输入:输入的第一行指定用例数量T;用例的第二行输入正整数;

输出:输出是否为特殊的正整数

例如:
intput:
2
1232145
4543622

output:
1

1

-------------------------------------------------------------------------------------------------------------------------------

解题思路:

    首先将需要判断的数字分离,依次存进一个vector中,然后再用迭代器对其依次分割,求取两边的和,代码有注释。

#include<iostream>
#include<vector>

using namespace std;

bool is_magicnum(int number)
{
	//将数字分离push进vector temp中
	vector<int> temp;
	while (number)
	{
		temp.push_back(number % 10);
		number /= 10;
	}

	//it迭代器是用来标记分割点位置,以it所指元素后面这条边为分界线,eg:1236,如果it指向3,则将1236划分为123与6两部分。
	//ifront用来对it划分的前一部分数字进行求和
	//iback用来对it划分的后一部分数字进行求和
	for (vector<int>::iterator it = temp.begin(); it != temp.end()-1; it++)
	{
		int front=0;
		int back=0;

		for (vector<int>::iterator ifront = temp.begin(); ifront != it + 1; ifront++)
			front += *ifront;

		for (vector<int>::iterator iback = it+1; iback != temp.end(); iback++)
			back += *iback;

		if (front == back) return true;
	}
	
	return false;
}

int main()
{
	int n;
	cin >> n;
	int * num = new int[n];

	for (int i = 0; i < n; i++)
		cin >> num[i];

	for(int i=0;i<n;i++)
		cout << is_magicnum(num[i])<<endl;

	delete[] num;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值