【C语言做题系列】Number Steps

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;
}
发布了16 篇原创文章 · 获赞 0 · 访问量 447

猜你喜欢

转载自blog.csdn.net/qq_45627679/article/details/104293622