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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

方阵循环右移

發(fā)布時(shí)間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 方阵循环右移 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目

練習(xí)7-8 方陣循環(huán)右移 (20 分)
本題要求編寫(xiě)程序,將給定n×n方陣中的每個(gè)元素循環(huán)向右移m個(gè)位置,即將第0、1、?、n?1列變換為第n?m、n?m+1、?、n?1、0、1、?、n?m?1列。

輸入格式:
輸入第一行給出兩個(gè)正整數(shù)m和n(1≤n≤6)。接下來(lái)一共n行,每行n個(gè)整數(shù),表示一個(gè)n階的方陣。

輸出格式:
按照輸入格式輸出移動(dòng)后的方陣:即輸出n行,每行n個(gè)整數(shù),每個(gè)整數(shù)后輸出一個(gè)空格。

輸入樣例:
2 3
1 2 3
4 5 6
7 8 9
輸出樣例:
2 3 1
5 6 4
8 9 7

分析

本體循環(huán)右移,類(lèi)似一個(gè)環(huán),右移長(zhǎng)度超過(guò)環(huán)的長(zhǎng)度,將從環(huán)尾移到環(huán)頭。右移長(zhǎng)度超過(guò)環(huán)的長(zhǎng)度,列標(biāo)從j變成p=(j+m)%n。右移長(zhǎng)度小于等于環(huán)的長(zhǎng)度,列標(biāo)j變成j+m。注意等于的時(shí)候也是j+m。

一開(kāi)始考慮直接對(duì)這個(gè)數(shù)組進(jìn)行處理,逐列判斷,兩兩交換初始的數(shù)據(jù)和右移后的數(shù)據(jù),但是后來(lái)發(fā)現(xiàn)兩兩交換時(shí),可能不需要進(jìn)行到最后一列,就已經(jīng)全部右移完畢,此時(shí)如果再交換,會(huì)導(dǎo)致將正確的位置打亂。

所以增加了一個(gè)數(shù)組,用來(lái)表示交換后的數(shù)組b。將原數(shù)組a[i][j]下標(biāo)中的元素放到b數(shù)組里合適的位置。

代碼

#include<stdio.h>int main(){int m,n,i,j,a[9][9],k,p,b[9][9];//a存初始數(shù)組,b是右移后的數(shù)組scanf("%d %d",&m,&n);if(m>n) m=m%n;//移動(dòng)的距離m如果大于數(shù)組列數(shù)n,需要對(duì)m處理for(i=0;i<9;++i){//數(shù)組初始化for(j=0;j<9;++j){a[i][j]=0;b[i][j]=0;}}for(i=1;i<=n;++i){for(j=1;j<=n;++j){scanf("%d",&a[i][j]);}}for(i=1;i<=n;++i){for(j=1;j<=n;++j){if(j+m>n) {//如果移動(dòng)的距離超過(guò)了數(shù)組的大小,進(jìn)行取余p=(j+m)%n;}else p=j+m;//移動(dòng)的距離小于等于數(shù)組的大小b[i][p]=a[i][j];}}for(i=1;i<=n;++i){for(j=1;j<=n;++j){printf("%d ",b[i][j]);}printf("\n");} }

總結(jié)

以上是生活随笔為你收集整理的方阵循环右移的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。