输入三个自然数

来源:互联网 发布:linux中wget命令 编辑:程序博客网 时间:2024/05/11 05:00

FJNU.1406

Description
输入三个自然数,n,i,j(n<=10,1<=i<=n,1<=j<=n).n表示有一个n行n列的棋盘格子,(i,j)表示棋盘中格子的位置
如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子
要求编制一个程序,根据输入的n,i,j的值,输出与格子(i,j)在同一行、同一列、同一对角线上的所有格子位置.
例如:当n=4,i=2,j=3时,输出的结果是:
(2,1)(2,2)(2,3)(2,4) {同一行格子的位置}
(1,3)(2,3)(3,3)(4,3) {同一列格子的位置}
(1,2)(2,3)(3,4) {左上到右下对角线上的格子位置}
(4,1)(3,2)(2,3)(1,4) {左下到右上对角线上的格子位置}

Input
该题有多组测试数据,每组测试数据一行,包含三个整数n,i,j,它们之间由空格隔开。

Output
根据题目所描述的输出,不包含任何空格。

Sample Input
4 2 3

Sample Output
(2,1)(2,2)(2,3)(2,4)
(1,3)(2,3)(3,3)(4,3)
(1,2)(2,3)(3,4)
(4,1)(3,2)(2,3)(1,4)

Source
noip96普及组

My Program 

#include<iostream>
using namespace std;

void Draw(int n,int i,int j)
{
    
int t,k1,k2;

    
for(t=1;t<=n;t++)
        cout
<<"("<<i<<","<<t<<")";
    cout
<<endl;
    
    
for(t=1;t<=n;t++)
        cout
<<"("<<t<<","<<j<<")";
    cout
<<endl;

    k1
=i-j;
    
for(t=1;t<=n;t++)
        
if(t+k1>0&&t+k1<=n)
            cout
<<"("<<t+k1<<","<<t<<")";
    cout
<<endl;

    k2
=i+j;
    
for(t=n;t>=1;t--)
        
if(k2-t>0&&k2-t<=n)
            cout
<<"("<<t<<","<<k2-t<<")";
    cout
<<endl;

}


int main()
{
    
int n,i,j;
    
while(scanf("%d%d%d",&n,&i,&j)!=EOF)
        Draw(n,i,j);
    
return 0;
}

YOYO's Note:
输出(i,j)所在的同一行、同一列、左上到右下对角线、左下到右上对角线上各点坐标。
注意左上-右下对角线上行列关系是x-y=i-j,左下-右上对角线上行列关系是x+y=i+j。
原创粉丝点击