同行列对角线的格子 您所在的位置:网站首页 对角线的 同行列对角线的格子

同行列对角线的格子

2023-03-28 00:13| 来源: 网络整理| 查看: 265

传送门:http://noi.openjudge.cn/ch0108/02/总时间限制: 1000ms 内存限制: 65536kB描述

输入三个自然数N,i,j (1n)//在矩阵的右下三角部分 39 { 40 x=n; 41 y=i+j-x; 42 while(y=1) 53 { 54 printf("(%d,%d) ",x,y); 55 x--; y++; 56 } 57 } 58 return 0; 59 } 代码一

 另一种思路:

 

同一行和同一列就不说了,下面说说两条对角线方向的处理。如图所示,假设输入的点(i,j)是黄色点。首先根据黄色点坐标(i,j)计算出蓝色点坐标(x,y),再从蓝色点遍历该条斜线方向的所有单元格。

左上到右下的斜线方向:观察发现从(i,j)到(x,y)过程中,每走一步都会使得行和列坐标减1。蓝色块应该就是在棋盘的边界,蓝色块的行和列必然有一个是1.所以从黄色块到蓝色块的步数是min(i,j)。故可以根据(i,j)计算出(x,y),如下:

min=MIN(i,j)

x=i-min+1

y=j-min+1

 

同理,从左下到右上的斜线方向:从黄块(i,j)到蓝块(x,y)的过程中,行坐标每次加1,列坐标每次减1.蓝块必然是处于棋盘边缘处,故从黄块到蓝块的步数是

min=MIN(n-i,j-1)

所以x=i+min,y=j-min

所以代码如下: 

1 #include 2 int main() 3 { 4 int N,i,j,x,y,min; 5 scanf("%d%d%d",&N,&i,&j); 6 7 for(y=1;y


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有