pku2718.cpp

来自「这是ACM 方面的资料 是PKU的 北京大学的出来的」· C++ 代码 · 共 102 行

CPP
102
字号
#include <stdio.h>
#include <string.h>

int main()
{
	int t, n, i, num1, num2, mindis, j;
	char s[100];
	int dig[10], u1, u2, p;
	scanf("%d\n", &t);
	while (t--)
	{
		gets(s);
		if (s[0] == '\0')
		{
			break;
		}

		n = strlen(s);
		n = (n + 1) / 2;

		for (i = 0; i < n; i++)
		{
			dig[i] = s[2 * i] - '0';
		}

		if (n == 2 && dig[0] == 0)
		{
			printf("%d\n", dig[1]);
			continue;
		}

		if (n % 2 == 1)
		{
			for (i = n - 1, num2 = 0; i >= (n + 1) / 2; i--)
			{
				num2 *= 10;
				num2 += dig[i];
			}

			if (dig[0] == 0)
			{
				num1 = 10 * dig[1];
			}
			else
			{
				num1 = 10 * dig[0] + dig[1];
			}
	
			for (i = 2; i < (n + 1) / 2; i++)
			{
				num1 *= 10;
				num1 += dig[i];
			}

			printf("%d\n", num1 - num2);
		}
		else
		{
			mindis = 1000000;

			for (i = 0; i < n - 1; i++)
			{
				if (dig[i] == 0)
				{
					continue;
				}
				u1 = i;
				u2 = i + 1;

				num2 = dig[u2];
				num1 = dig[u1];

				for (j = 0, p = 0; p < n / 2 - 1; p++, j++)
				{
					while (j == u1 || j ==u2)
					{
						j++;
					}
					num2 *= 10;
					num2 += dig[j];
				}
				for (j = n - 1, p = 0; p < n / 2 - 1; p++, j--)
				{
					while (j == u1 || j ==u2)
					{
						j--;
					}
					num1 *= 10;
					num1 += dig[j];
				}
				if (num2 - num1 < mindis)
				{
					mindis = num2 - num1;
				}
			}
			printf("%d\n", mindis);
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?