#P1020. 数学猜想 · 含九数

数学猜想 · 含九数

数学猜想 · 含九数

题目背景

数学兴趣小组上,小蓝提出了一个大胆的猜想:

任意一个不小于 99 的整数,都可以写成两个「含九数」的和。

所谓「含九数」,就是十进制表示中至少包含一个数字 9 的正整数。例如 9、19、90、109、1999 都是含九数;10、88、100 都不是含九数。

同桌小紫不相信,于是两人找来了一堆数字准备验证。请你帮忙判断:对于给定的整数 x,能否找到两个含九数 a 和 b,使得 a + b = x?

题目描述

给定 t 组测试数据,每组给出一个整数 x

对于每组数据,找到两个含九数 a, b,满足 a + b = x;如果不存在,输出 -1。

若有多组解,输出 a 最小的那一组。

输入格式

第一行一个整数 t(1 ≤ t ≤ 10⁴),表示测试数据组数。

接下来 t 行,每行一个整数 x(99 ≤ x ≤ 10⁹),表示需要验证的数。

输出格式

对于每组数据:

  • 若存在解,输出一行两个整数 a b(1 ≤ a, b ≤ x),用空格分隔。
  • 若不存在解,输出一行 -1

样例

2
130
10001
39 91
9992 9

说明:

  • 130 = 39 + 91,39 和 91 都含数字 9。
  • 10001 = 9992 + 9,9992 和 9 都含数字 9。
3
99
100
101
9 90
9 91
92 9

说明:

  • 99 = 9 + 90
  • 100 = 9 + 91
  • 101 = 92 + 9(也可输出 9 + 92)

数据范围

  • 1 ≤ t ≤ 10⁴
  • 99 ≤ x ≤ 10⁹

提示

对于 x ≥ 99,猜想总是成立的——一定存在至少一组解。

一种简单的构造方法:枚举所有不超过 99 的含九数(只有 19 个:9, 19, 29, ..., 89, 90, 91, ..., 99),对每个 a,检查 x − a 是否也是含九数。每组的枚举次数不超过 19 次。

检查一个数是否含 9:不断取个位判断,或转为字符串查找 '9'