一、题目
如图所示,从平面上的点(0,0)开始,我们编写了所有非负整数0、1、2…。例如,分别在点(1,1),(2,0)和(3,1)处写入了1、2和3,并且此模式继续进行。
您将要编写一个程序,该程序读取点(x,y)的坐标,并写入在该点上已写入的数字(如果有)。输入中的(x,y)坐标在0 … 5000范围内。
输入
输入的第一行是N,此问题的测试用例数。在接下来的N行中,有x和y表示点的坐标(x,y)。
输出
对于输入中的每个点,请写在该点写的数字;如果没有,则写No Number。
样本输入
3
4 2
6 6
3 4
样品输出
6
12
无编号
二、分析
在本题中,输入数据文件中第一行为第一个整数N,表示测试的个数,因此是第一种输入情形,程序要处理N个测试数据,每个测试数据表示平面上的一个点的坐标,要输出该点对应的非负整数;如果没有对应的非负整数,则输出“NO Number”。
非负整数 0,1,2…有规律的分布在两条直线上:
L
1
:
y
=
x
L_{1}:y=x
L1:y=x
L
2
:
y
=
x
−
2
L_{2}:y=x-2
L2:y=x−2
其中规律为:
1. 如果输入的点不满足这两条直线方程,则没有对应的非负整数。
2. 否则,非负整数在直线
L
1
:
y
=
x
L_{1}:y=x
L1:y=x和直线
L
2
:
y
=
x
−
2
L_{2}:y=x-2
L2:y=x−2上满足的规律是:
1)
x
x
x为偶数,则对应
n
u
m
b
e
r
=
x
+
y
number=x+y
number=x+y
2)
x
x
x为奇数*,则对应
n
u
m
b
e
r
=
x
+
y
−
1
number=x+y-1
number=x+y−1
三、代码
#include <iostream>
using namespace std;
int main()
{
int N,x,y,i;
cin>>N;
for(i=0;i<N;i++)
{
cin>>x>>y;
if(y==x||y==x-2)
{
if(x%2!=0) cout<<x+y-1<<endl;
if(x%2==0) cout<<x+y<<endl;
}
else
{
cout<<"No Number"<<endl;
}
}
return 0;
}