同行列对角线的格子 | 您所在的位置:网站首页 › 对角线的 › 同行列对角线的格子 |
传送门: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 所以代码如下: ![]() ![]() |
CopyRight 2018-2019 实验室设备网 版权所有 |