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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

wikioi 1160 蛇形矩阵

發布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wikioi 1160 蛇形矩阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*======================================================================== 1160 蛇形矩陣 題目描述 Description小明玩一個數字游戲,取個n行n列數字矩陣(其中n為不超過100的奇數),數字的填補方法為:在矩陣中心從1開始以逆時針方向繞行,逐圈擴大,直到n行n列填滿數字,請輸出該n行n列正方形矩陣以及其的對角線數字之和. 輸入描述 Input Descriptionn(即n行n列) 輸出描述 Output Descriptionn+1行,n行為組成的矩陣,最后一行為對角線數字之和 樣例輸入 Sample Input3 樣例輸出 Sample Output5 4 36 1 27 8 925 數據范圍及提示 Data Size & Hint ==========================================================================*/

解析:

下面是n等于7和n等于5的時候數組的樣子:

? ?

填充數組的方式 如下:

先手動填充數字1(其位置為(n/2,n/2),如上圖所示。)
然后一層一層地填充其余部分的數據。(層數m=n/2)
對每一層的填充,按如下順序處理:

先填充右邊這一列(這一列最底下的數據先不填充,下同。)

接著填充上邊的橫行,然后填充左邊這一列,最后填充下邊的橫行。

(每一段的填充范圍如圖顏色所示。)

?

對第x層(1<=x<=m),填充某一段時,該段數據個數為2*x。

比如n=5,第一層每一段的個數是2,第二層每一段的個數是4.

n=7時,第三層每一段的個數是6.

……所以,每一段的循環次數k=2*x。

下面的代碼對這一點的處理稍微不同,但本質一樣。下面的k從2開始,k/2要小于或等于m即可。

(段與段之間要注意修改坐標)

下面是代碼:

#include<stdio.h> int main() {int i,j,n,a[100][100],k,m,t,p,sum=0;scanf("%d",&n);i=j=n/2;//最內層的1所在的位置 m=n/2;//循環填充的層數(不包括最內層的1) a[i][i]=1;t=2;//準備放進數組的數據for(k=2;k/2<=m;k=k+2) {j=j+1;for(p=1;p<=k;p++)//填充右側這一列{a[i][j]=t;t++;i--;}i++;j--;for(p=1;p<=k;p++)//填充上邊這一橫行{a[i][j]=t;t++;j--;}j++;i++;for(p=1;p<=k;p++)//填充左邊這一列{a[i][j]=t;t++;i++;}i--;j++;for(p=1;p<=k;p++)//填充下面這一橫行{a[i][j]=t;t++;j++;}j--;}for(i=0;i<n;i++)//輸出數組順便求對角線元素的和{for(j=0;j<n;j++){printf("%5d ",a[i][j]);if(i==j||i+j==n-1) sum=sum+a[i][j];}printf("\n");}printf("%d\n",sum);return 0; }

?

轉載于:https://www.cnblogs.com/huashanqingzhu/p/3458514.html

總結

以上是生活随笔為你收集整理的wikioi 1160 蛇形矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。

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