B. 中位数
F - 岩上无心云相逐
https://vjudge.net/problem/CodeForces-2032B/origin
给定两个数字 x,yx,y。你需要确定是否存在一个整数 nn 使得 S(n)=xS(n)=x,S(n+1)=yS(n+1)=y。
这里,S(a)S(a) 表示数字 aa 在十进制数字系统中的数字之和。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 tt (1≤t≤5001≤t≤500)。测试用例的描述随之而来。
每个测试用例的第一行包含两个整数 x,yx,y (1≤x≤1000,1≤y≤10001≤x≤1000,1≤y≤1000)。
输出
对于每个测试用例,如果不存在合适的 nn,则打印 "NO"。否则,输出 "YES"。
你可以以任何大小写输出每个字母(例如,"YES","Yes","yes","yEs","yEs" 将被识别为正面答案)。
示例
Inputcopy | Outputcopy |
---|---|
7 1 2 77 77 997 999 999 1 1000 1 1 11 18 1 | Yes No No Yes No No Yes |
注意
在第一个测试用例中,例如,n=100n=100 是有效的。S(100)=1S(100)=1,S(101)=2S(101)=2。
在第二个测试用例中,可以证明对于所有 nn,S(n)≠S(n+1)S(n)=S(n+1);因此,答案是 No。
在第四个测试用例中,n=10111−1n=10111−1 是有效的,它是一个由 111111 位数字 99 组成的数字。
思路:
因为s[a]==x,s[a+1]==y;S表示的是a这个数每一位数相加得到的结果s[a];
分两种情况:x<y
则成立的话:x+1==y;及只有x的个位+1,且原个位不是9,(剩下的每一位一样)
x>y
则成立的话:从个位起,有w(未知)个9,及w次x-=9直到x+1==y
(这样的话s[a+1]的结果就是x=x-w*9 ==y);
代码:
//因为s[a]==x,s[a+1]==y;S表示的是a这个数每一位数相加得到的结果s[a];
//分两种情况:x<y
//则成立的话:x+1==y;及只有x的个位+1,且原个位不是9,(剩下的每一位一样)
//x>y
//则成立的话:从个位起,有w(未知)个9,及w次x-=9直到x+1==y
//(这样的话s[a+1]的结果就是x=x-w*9 ==y);
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int n, t, m, x, y;
int main() {
scanf("%d", &t);
while (t--) {
scanf("%d %d", &n, &m);
n += 1;
while (n >0) {
if (n == m) {
break;
}
else {
n -= 9;
}
}
if (n == m) {
printf("Yes\n");
}
else {
printf("No\n");
}
}
return 0;
}