Starting from point (0,0) on a plane, we have written all non-negative integers 0, 1, 2,… as shown in the figure. For example, 1, 2, and 3 has been written at points (1,1), (2,0), and (3, 1) respectively and this pattern has continued.
You are to write a program that reads the coordinates of a point (x, y), and writes the number (if any) that has been written at that point. (x, y) coordinates in the input are in the range 0…5000.
Input
The first line of the input is N, the number of test cases for this problem. In each of the N following lines, there is x, and y representing the coordinates (x, y) of a point.
Output
For each point in the input, write the number written at that point or write No Number if there is none.
Sample Input
3
4 2
6 6
3 4
Sample Output
6
12
No Number
题意:
首先输入一个数n,表示有n组数据,然后每行输入x坐标和y坐标,按照上图的坐标输出结果。
注意:
题目有给坐标的范围。
算法思想:
其实就是找规律。定义两个数组,按照规律算出所有的结果,输入坐标后直接对号入座即可。
上代码:
#include <stdio.h>
#include <string.h>
const int maxn=1e5+5;
int a[maxn];
int b[maxn];
int main()
{
int i;
int n;
int x, y; //n组 数据, x坐标,和y坐标
a[0]=0; //找规律得出第一个数组
for(i=1; i<=5000; i++)
{
if(i%2)
a[i]=a[i-1]+1;
else
a[i]=a[i-1]+3;
}
b[2]=2; //找规律得出第二个数组
for(i=3; i<=5000; i++)
{
if(i%2)
b[i]=b[i-1]+1;
else
b[i]=b[i-1]+3;
}
scanf("%d", &n);
while(n--)
{
scanf("%d%d", &x, &y);
if(x==y) //判断输出
printf("%d", a[x]);
else //此处还需再次判断
{
if(x-y==2)
printf("%d", b[x]);
else
printf("No Number");
}
printf("\n");
}
return 0;
}