日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1120:同行列对角线的格 | OpenJudge NOI 1.8 02:同行列对角线的格子

發布時間:2025/3/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1120:同行列对角线的格 | OpenJudge NOI 1.8 02:同行列对角线的格子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1120:同行列對角線的格
OpenJudge NOI 1.8 02:同行列對角線的格子

【題目考點】

1. 二維數組

【解題思路】

解法1:移動焦點

設焦點起始位置,每移動一次,輸出一次當前位置。

  • 在輸出左上右下斜線時,先找到輸入位置所在左上右下斜線中最左上方的位置,焦點從這個位置開始不斷向右下移動
  • 在輸出右上左下斜線時,先找到輸入位置所在右上左下斜線中最右上方的位置,焦點從這個位置開始不斷向左下方移動

解法2:遍歷矩陣

遍歷整個矩陣,輸出其中滿足條件的位置
同一行:行坐標相同
同一列:列坐標相同
同一左上右下斜線:行列坐標差值相同
同一右上左下斜線:行列坐標加和相同
【注意】最后一個要求是從左下到右上,行坐標從大到小遍歷,列坐標從小到大遍歷

【題解代碼】

解法1:移動焦點

#include <bits/stdc++.h> using namespace std; int main() {int n, sx, sy, x, y, a[15][15];//(sx,sy)輸入的位置 (x,y)焦點位置 scanf("%d %d %d", &n, &sx, &sy);for(int j = 1; j <= n; ++j)//輸出同一行的格子 printf("(%d,%d) ", sx, j);putchar('\n');//換行 for(int i = 1; i <= n; ++i)//輸出同一列上的格子 printf("(%d,%d) ", i, sy);putchar('\n');x = sx, y = sy;//尋找與(sx,sy)在同一左上右下斜線上,左上方的第一個位置 while(x > 1 && y > 1)//找左上方的格子 x--, y--;//向左上方移動 //此時x, y就是左上右下斜線上左上角第一個位置for(; x <= n && y <= n; ++x, ++y)//輸出左上右下斜線上的格子 printf("(%d,%d) ", x, y);putchar('\n');x = sx, y = sy;//尋找與(sx,sy)在同一左下右上斜線上,左下方的第一個位置 while(x < n && y > 1) //找左下方的格子 x++, y--;//向左下方移動 //此時x,y就是左下右上斜線上左下角第一個位置for(; x >= 1 && y <= n; --x, ++y)//輸出左下右上斜線上的格子 printf("(%d,%d) ", x, y);return 0; }

解法2:遍歷矩陣

#include <bits/stdc++.h> using namespace std; int main() {int n, si, sj, a[15][15];//(si,sj)輸入的位置 scanf("%d %d %d", &n, &si, &sj);for(int j = 1; j <= n; ++j)//輸出同一行的格子 printf("(%d,%d) ", si, j);putchar('\n');//換行 for(int i = 1; i <= n; ++i)//輸出同一列上的格子 printf("(%d,%d) ", i, sj);putchar('\n');for(int i = 1; i <= n; ++i)//行號 從左上到右下 for(int j = 1; j <= n; ++j)//列號 if(i - j == si - sj)//在同一左上右下斜線 printf("(%d,%d) ", i, j);putchar('\n');for(int i = n; i >= 1; --i)//行號 從左下到右上 for(int j = 1; j <= n; ++j)//列號 if(i + j == si + sj)//在同一左下右上斜線 printf("(%d,%d) ", i, j);putchar('\n');return 0; }

總結

以上是生活随笔為你收集整理的信息学奥赛一本通 1120:同行列对角线的格 | OpenJudge NOI 1.8 02:同行列对角线的格子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。