计算各数位的和是否相等(桶排)

计算各数位的和是否相等(桶排)_第1张图片

 // 分别计算左右两边各数的和,不同值时的数量

eg.四位数,左边数的有10~99,右边数有00~99

                    和有1~18                和有0~18

桶排,和相同放一个桶,分别计算左右两边不同和的数量

while (len <= 8)
	{
		int left[50] = { 0 };
		int right[50] = { 0 };
		for (int i = 0; i < num(len / 2); i++)
		{
			int temp = i, sum = 0;
			while (temp > 0)
			{
				sum += temp % 10;
				temp /= 10;
			}left[sum]++;
		}// 分别计算左右两边各数的和不同值时的数量
		for (int i = num(len / 2) / 10; i < num(len / 2); i++)
		{
			int temp = i, sum = 0;
			while (temp > 0)
			{
				sum += temp % 10;
				temp /= 10;
			}right[sum]++;
		}
		for (int i = 0; i < 9 * len / 2 + 1; i++)
			count += right[i] * left[i];
		len += 2;

你可能感兴趣的:(运算算法,排序,算法)