1. 程式人生 > >【AC】魔法陣

【AC】魔法陣

【題目描述】  昔有人,名斯凱利恩夫·盧克。其英文名乃SkyLYnf·Luke。汝知之何名?曰實,吾亦不知。其有別號曰ylm。何?吾亦不知。汝宜喻之。其乃吾。 他有一個Servant,叫做阿爾託莉雅·潘德拉貢,英文名是Arturia Pendragon,別名是Saber。她的 誓約勝利之劍(Excalibur)比紅A的無限劍制厲害多了!(上一題的紅A沒有Saber厲害)【題目描述·真】  有一天,skylynf正在畫召喚陣。這時候saber走到了召喚陣中間,告訴skylynf說:“你個菜鳥master,連召喚陣都畫錯了,趕快重畫!” 於是saber拿出了一張寫滿了召喚陣畫法的紙。 請你寫一個程式來幫skylynf修改魔法陣,以防他被saber拿劍砍死。 魔法陣是一個n行n列的數列陣。每一個數都小於2147483647。 魔法陣被粗心的skylynf給畫歪了,現在saber要讓他把整個魔法陣移一下位。 saber給了一個例子:

圖1是一個錯誤的魔法陣。現在我們要像圖2這樣移位。圖3是正確的魔法陣。 圖1的第4列,每個數字向下移4位,剛好回到原位,如圖3所示。   這個模式是這樣的:對於第i列的魔法陣來說,把每一個數字向下移i位。對於超過n的,就當做一個環,比如矩陣第四行第一列的數字21,我們就將它行數加一,發現他超過了4,於是就換到了第一行。 現在給你一個n*n的魔法陣,請按照這個規則來輸出正確的魔法陣。 Skylynf已經超級口渴了。現在他特別想喝水。請你趕快寫完這題好讓skylynf去讓DTZ倒水給他喝。  

輸入

第一行一個數n(n小於100)  接下來n行,每行n個數。表示skylynf魔法陣。

輸出

N行,每行n個數,表示正確的魔法陣。

輸入樣例

4  13 11 33 31  44 4 5 16  40 15 26 29  21 43 13 13

輸出樣例

21 15 5 31  13 43 26 16  44 11 13 29  40 4 33 13

說明

N<=100

解題思路:

就是第一行的數往下移1位,就是第二行的數往下移2位,就是第三行的數往下移3位以此類推。

再用個數組裝答案就好啦!

程式碼:

#include<cstdio> int n,a[101][101],b[101][101]; int main() {     scanf("%d",&n);     for(int i=1;i<=n;i++)         for(int j=1;j<=n;j++)             scanf("%d",&a[i][j]),b[i][j]=a[i][j];//讀數,賦初值。     for(int i=1;i<=n;i++)     {         for(int j=1;j<=n;j++)         {               if(i+j>n)                   a[i+j-n][j]=b[i][j];               else                   //實現交換。                 a[i+j][j]=b[i][j];         }     }     for(int i=1;i<=n;i++)     {         for(int j=1;j<=n;j++)         {             printf("%d ",a[i][j]);//輸出答案。         }         printf("\n");//換行。     }     return 0; }