【模拟】魔法阵

【题目描述】 
昔有人,名斯凯利恩夫·卢克。其英文名乃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个数,表示正确的魔法阵。

输入样例


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
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;
}

你可能感兴趣的:(模拟)