ZOJ 1414题详解

一、题目

如图所示,从平面上的点(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 L1y=x L 2 : y = x − 2 L_{2}:y=x-2 L2y=x2
其中规律为:
1. 如果输入的点不满足这两条直线方程,则没有对应的非负整数。
2. 否则,非负整数在直线 L 1 : y = x L_{1}:y=x L1y=x和直线 L 2 : y = x − 2 L_{2}:y=x-2 L2y=x2上满足的规律是:
   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+y1

三、代码

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值