2018大华软件竞赛——模拟赛——第三题

3 有一种特殊的正整数(int类型),将数分为两侧,每侧至少有一位数,两侧的每个数字相加相等,请写出判断的方法用来检测是否这种数。
比如:1236,可以拆分为123和6。
输入的第一行指定用例数量T;
用例的第二行输入正整数;
输出是否为特殊的正整数 bool is_magicnum(int number)

intput:
2
1232145
4543622

output:
1
1

用双指针可以说是很简单了。

#include "iostream"
#include "algorithm"
#include "vector"
#include "string"
using namespace std;


bool is_magicnum(int number)
{
	//用双指针解决这个问题
	vector<int> num;
	while (number)
	{
		num.push_back(number % 10);
		number /= 10;
	}
	int left = 0, right = num.size() - 1;
	int sumleft = num[left]; int sumright = num[right];
	while (right - left > 1)
	{
		if (sumleft < sumright)
		{
			left++;
			sumleft += num[left];
		}
		else if (sumleft > sumright)
		{
			right--;
			sumright += num[right];
		}
		else
		{
			if (right - left > 2)
			{
				left++;
				sumleft += num[left];
				right--;
				sumright += num[right];
			}
			else
			{
				if (num[left + 1] == 0)
					return true;
				else
					return false;
			}
		}
	}
	if (sumleft == sumright)
		return true;
	else
		return false;
}


int main()
{
	int size;
	cin >> size;
	vector<int> data(size, 0);
	for (int i = 0; i < data.size(); i++)
	{
		cin >> data[i];
	}
	for (int i = 0; i < data.size(); i++)
		data[i] = is_magicnum(data[i]);
	for (int i = 0; i < data.size(); i++)
		cout << data[i] << endl;
	while (1);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/w8253497062015/article/details/80084135