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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

“魔方阵“c语言实现,奇数型

發(fā)布時間:2024/3/24 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “魔方阵“c语言实现,奇数型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【問題描述】
"魔方陣"是指一個AN*N矩陣(在本題中N僅為奇數(shù),且N>1),以自然數(shù)1,2, 。。。 N2為元素進(jìn)行填充,每個位置上分別放置一個元素,使每行、每列以及主、副對角線上的元素之和都相等。
如3*3魔方陣,圖在每行、每列、主對角線、副對角線上元素之和均為15:
8? 1? 6
3? 5? 7
4? 9? 2
奇數(shù)階魔方陣的生成算法如下,初始矩陣A為空,從1開始依據(jù)下面的規(guī)則依次放置各個自然數(shù)(注意在下面的敘述中各元素行、列下標(biāo)均以1-N計數(shù)):
1.???????? 將1放在第一行正中的位置,即A[1, (j+1)/2];
2.???????? 設(shè)最后放置的元素是A[i, j],則將下一個元素放在最后一個插入位置的右上方,即A[i-1, j+1]。但如果該位置已超出方陣的上邊界(即如果i<0),則新位置取該列的最下一個位置,即A[N, j+1];如果該位置已超出方陣的右邊界,取新位置取該行的最左一個位置,即A[i-1, 1]。
3.???????? 若最近一個插入元素為N的整倍數(shù),則新位置取最后插入元素下面的位置,即A[i+1, j]。
輸入一個奇數(shù)N,打印對應(yīng)的N階魔方陣。
【輸入形式】

控制臺輸入一奇數(shù)N。
【輸出形式】

輸出一個N*N的魔方陣,其中每個數(shù)字占4位字符的寬度,向右對齊。
【樣例輸入】

5

【樣例輸出】

??17??24???1???8??1523???5???7??14??164???6??13??20??2210??12??19??21???311??18??25???2???9

【樣例說明】

輸入奇數(shù)5,輸出5階魔方陣。

看題目與樣例輸出,可以得出規(guī)律,從1開始到n*n,每個數(shù)都在上個數(shù)的右上角,墻有穿透性,如果右上角已經(jīng)被賦值則下個數(shù)向下走一格;

如此可以得出

#include <stdio.h> #include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */ void mofang(int n){int a[100][100]={0},i,q=0,p=0,j,_q,_p;p=(n+1)/2-1;//將1放在第一行正中的位置,即a[0, (j+1)/2-1];a[q][p]=1;for(i=2;i<=n*n;i++){_q=q;//保存一開始的值_p=p; //在對角情況if(q==0&&p==n-1){q=n-1;p=0;} //在第一行邊界情況else if(q==0){q=n-1;p=p+1;} //在最后一列邊界else if(p==n-1){q=q-1;p=0;} //普通情況else{q--;p++;} //如果他的右上方被占領(lǐng)if(a[q][p]!=0&&q==n-2){q=0;p=_p;}else if(a[q][p]!=0){q=_q+1;p=_p;}a[q][p]=i;} //輸出for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%4d",a[i][j]);}printf("\n");} } int main(int argc, char *argv[]) {int n;scanf("%d",&n);mofang(n);return 0; }

總結(jié)

以上是生活随笔為你收集整理的“魔方阵“c语言实现,奇数型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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