7 56 方陣迴圈右移 10分 (我的精華帖)

2021-10-13 07:27:16 字數 1126 閱讀 7311

本題要求編寫程式,將給定n×n方陣中的每個元素迴圈向右移m個位置,即將第0、1、⋯、n−1列變換為第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。

輸入格式:

輸入第一行給出兩個正整數m和n(1≤n≤6)。接下來一共n行,每行n個整數,表示乙個n階的方陣。

輸出格式:

按照輸入格式輸出移動後的方陣:即輸出n行,每行n個整數,每個整數後輸出乙個空格。

輸入樣例:

231

2345

6789

輸出樣例:

231

5648

97

#include

intmain()

}for

(i=0

;i) shu[i][0

]=t;}}

for(i=

0;i)printf

("\n");

}return0;

}

關於此題,我原先一直都是採用的乙個很麻煩的做法,在本文的最下面也會出現

但是對於上述這個做法,是老師給我講的,真的是很妙,就和妙蛙種子吃了妙脆角妙到了公尺奇妙妙屋妙到家了一樣妙。

那就是對於該題來說,不管一開始給的m是幾,我都是乙個乙個數的向後移動,然後迴圈m次即可,方便又實用!

下面是一般題目通用模板:

int

arrayshift

(int a,

int m,

int n)

a[0]

=t;}

}

這個模板可能有不妥的地方,不用管,主要是這個思路難能可貴:

就是首先定義乙個t,m是移動的位數,n是陣列長度,在外迴圈內,內迴圈外,首先讓t=數列a的最後一項(暫存這個最後一項的數值),然後內迴圈中,讓i=n-2,i>=0,i–,讓i=n-2的原因即讓其從倒數第二項開始依次向後推乙個,最後迴圈結束後,再把剛才儲存的最後乙個賦給第乙個,即完成依次向後推乙個的操作,迴圈m次後即可後移m個位數嘍(當然模板給的是一維陣列的情況,你像本題中即是乙個二維陣列,但無傷大雅,一樣做,很容易,就是再在最外面套乙個大迴圈代表行數唄)

7 12 方陣迴圈右移 20 分

本題要求編寫程式,將給定n n方陣中的每個元素迴圈向右移m個位置,即將第0 1 n 1列變換為第n m n m 1 n 1 0 1 n m 1列。輸入格式 輸入第一行給出兩個正整數m和n 1 n 6 接下來一共n行,每行n個整數,表示乙個n階的方陣。輸出格式 按照輸入格式輸出移動後的方陣 即輸出n行...

7 17 方陣迴圈右移 20分

本題要求編寫程式,將給定n n方陣中的每個元素迴圈向右移m個位置,即將第0 1 n 1列變換為第n m n m 1 n 1 0 1 n m 1列。輸入格式 輸入第一行給出兩個正整數m和n 1 n 6 接下來一共n行,每行n個整數,表示乙個n階的方陣。輸出格式 按照輸入格式輸出移動後的方陣 即輸出n行...

7 2 方陣迴圈右移 20分

7 2 方陣迴圈右移 20分 本題要求編寫程式,將給定n n方陣中的每個元素迴圈向右移m個位置,即將第0 1 n 1列變換為第n m n m 1 n 1 0 1 n m 1列。輸入格式 輸入第一行給出兩個正整數m和n 1 n 6 接下來一共n行,每行n個整數,表示乙個n階的方陣。輸出格式 按照輸入格...