国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

容易理解魔方陣源程序

2019-11-17 05:48:12
字體:
供稿:網(wǎng)友
所謂魔方陣是指這樣的的方陣:它的每一行、每一列和對角線之和均相等。輸入n,要求打印由自然數(shù)1到n2的自然數(shù)構(gòu)成的魔方陣(n為奇數(shù))。例如,當(dāng)n=3時,魔方陣為:8   1   63   5   74   9   2   此題要求輸入一個數(shù)據(jù)n,然后打印出奇數(shù)階魔方陣。要打印出奇數(shù)階魔方陣,首先要明白奇數(shù)階魔方陣的生成方法。其生成方法如下:(1) 第一個位置在第一行正中;(2) 新位置應(yīng)當(dāng)處于最近一個插入位置右上方,但如右上方位置已超出方陣上邊界,則新位置取應(yīng)選列的最下一個位置,如超出右邊界則新位置取應(yīng)選行的最左一個位置;(3) 若最近一個插入元素為N的整倍數(shù),則選下面一行同列上的位置為新位置。   了解了其生成方法,就可以根據(jù)此方法來寫出程序。首先設(shè)置int變量i,j,m,n。將從鍵盤輸入的數(shù)據(jù)存入地址&n。然后再設(shè)置int數(shù)組a[MAX][MAX],由于數(shù)組在定義時,必須設(shè)置其寬度。所以在開始時定義MAX的大小,以后當(dāng)出入的數(shù)字大于MAX時只需改動MAX即可。在此先設(shè)置為15。而根據(jù)生成方法可寫出下列程度來實現(xiàn)對魔方陣的排列: i=0,j=(n+1)/2-1;       /*代表第一行最中間的一列*/while(m<=n*n)            /*一共n*n個數(shù)*/{    a[i][j]=m;m++,i--,j++;      /*i--,j++;代表下一個數(shù)在原來那個數(shù)的右上方*/if((m-1)%n==0&&m>=1)          /* ( 1 )  */i=i+2,j=j-1;                   /*(2)*/
if(i<0) i=i+n;            /*超出上界則i+n*/if(j>(n-1)) j=j-n;        /*超出右邊界則j-n*/} 注釋(1)其根據(jù)為第三個要求。當(dāng)m-1為5的整數(shù)倍時,其位置為上一個數(shù)位置的同一列下面一行,由于當(dāng)m=1時(m-1)%n=0,但不用遵循其要求所有用 if( (m-1)%n==0&&m>=1)加以限制。注釋(2)由于在執(zhí)行這一步之前經(jīng)歷了i--,j++。則要使之位置為原來的下方則i+2,j-1; 最后利用循環(huán)語句輸出結(jié)果。其程序為:#define MAX 15#include <stdio.h>main(){ int n;int m=1;int i,j;int a[MAX][MAX];clrscr();scanf("%d",&n);i=0,j=(n+1)/2-1;while(m<=n*n){      a[i][j]=m;m++,i--,j++;if((m-1)%n==0&&m>1)i=i+2,j=j-1;
if(i<0) i=i+n;if(j>(n-1)) j=j-n;}for(i=0;i<n;i++)       for(j=0;j<n;j++)        { if(a[i][j]/10==0)               else printf("%d  ",a[i][j]);           每一列對齊*/        if(j==(n-1)) printf("");} }


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永新县| 庆阳市| 宾川县| 阜宁县| 方正县| 高邮市| 太白县| 札达县| 古蔺县| 金塔县| 镇赉县| 内江市| 吴忠市| 信阳市| 金沙县| 五华县| 通化县| 武宁县| 聊城市| 台江县| 平塘县| 定南县| 鹰潭市| 东光县| 葫芦岛市| 高要市| 景德镇市| 绥芬河市| 房产| 广水市| 锡林浩特市| 固镇县| 旬阳县| 绥芬河市| 奉节县| 西藏| 北川| 米泉市| 会泽县| 龙岩市| 红安县|