#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'。