2017.2.18 No.1 !爆零成就夢想!
/*【注意】:1.最后記得換行 2.”%d “←此處有空格 3.4個問題相對獨立 4.scanf “&” 5.if 與 for 中有多條指令加“{}” if中有else時特別注意
…………………..做題千萬別想太多…………………
開始正文o(∩_∩)o
題目描述 Description 幻方是一種很神奇的N?N矩陣:它由數字 1,2,3, … … ,N?N構成,且每行、每列及兩條對角線上的數字之和都相同。
當N為奇數時,我們可以通過以下方法構建一個幻方:
首先將 1寫在第一行的中間。之后,按如下方式從小到大依次填寫每個數(K= 2,3, … ,N?N ):
1.若 (K?1)在第一行但不在最后一列,則將 填在最后一行,(K?1)所在列的右一列;
2.若 (K?1)在最后一列但不在第一行,則將填在第一列,( K?1)所在行的上一行;
3.若 ( K?1)在第一行最后一列,則將填在(K ?1)的正下方;
4.若 (K?1)既不在第一行,也不在最后一列,如果( K?1)的右上方還未填數,
則將 K填在( K?1)的右上方,否則將填在( K? 1)的正下方。
現給定N,請按上述方法構造N?N的幻方。
·輸入描述 Input Description 輸入文件只有一行,包含一個整數,即幻方的大小。
·輸出描述 Output Description 輸出文件包含N行,每行N個整數,即按上述方法構造出的N?N的幻方。相鄰兩個整數之間用單個空格隔開。
·樣例輸入 Sample Input 3
·樣例輸出 Sample Output 8 1 6
3 5 7
4 9 2
·數據范圍及提示 Data Size & Hint 對于 100%的數據,1 ≤ N ≤ 39且為奇數。
→模擬
int n; int m[50][50];
using namespace std;
int main() { scanf(“%d”,&n); int x=1,y=(n/2)+1; m[x][y]=1; for(int k=2;k<=n*n;k++) { if(x==1&&y!=n) {x=n;y++;} else if(x!=1&&y==n) {x–;y=1;} else if(x==1&&y==n) x++; else if(x!=1&&y!=n) { if(m[x-1][y+1]==0) {x–;y++;} else x++; } m[x][y]=k; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) PRintf(“%d “,m[i][j]); cout<
新聞熱點
疑難解答