[C/C++ 演算法]-資料結構與演算法(文魁):魔術方塊的演算法(在方陣中橫、豎、斜線的值都一樣)

[C/C++ 演算法]-資料結構與演算法(文魁):魔術方塊的演算法(在方陣中橫、豎、斜線的值都一樣)

[C/C++ 演算法]-資料結構與演算法(文魁)魔術方塊的演算法(在方陣中橫、豎斜線的值都一樣

 

線上執行結果:http://www.tutorialspoint.com/compile_c_online.php

 

/* =========== Program Description ========= */
/* 程式名稱 : 4_3.cpp						 */
/* 演算法名稱:魔術方塊的演算法				 */
/* 輸入:一個的整數陣列					     */
/* 輸出:以照魔術方塊的規則填入資料的整數陣列*/
/* ========================================= */
#define n 3
// 宣告標頭檔		
#include "stdio.h"
// 宣告函式原型
// 利用傳址的方式把Array M傳進square函式中
void square(int *M);
void main(void)
{
int M[n][n]={0};
int i,j;
square(&M[0][0]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("M[%d][%d] = %2d",i,j,M[i][j]);
printf("\n");
}
getchar();
}
void square(int *M)
{
int i,j,p,q,k;
i=0;
j=(n-1)/2;
M[i*n+j]=1;
for(k=2;k<=n*n;k++)
{
p=(i-1+n)%n;
q=(j-1+n)%n;
if(M[p*n+q]>0)
{
i=(i+1)%n;
k--;
}else {
i=p ;
j=q;
M[i*n+j]=k;
}
}
}




 



發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *