幻方的實現,矩陣每行每列每個對角線之和相等

/************************************************************************************
作者: 徐權
完成日期:20150721
函數功能:幻方功能的實現(每行每列每個對角線的和是相等的)
*************************************************************************************/




#include<stdio.h>
#include<stdlib.h>
#include<math.h>




#define N 10  //下面有手動輸入函數,如果使用,請將這條代碼註釋,下面scanf()函數代碼激活,默認N爲10


int main()
{
int **huanfang;
int i, j;
int count = 1;


//手動輸入調用函數
//int N;
//puts("請輸入幻方矩陣的邊寬:");
//scanf_s("%d", &N);  //VS2013及以上平臺手動輸入函數調用
//scanf("%d", &N);  //VC++6.0 等C89的標準庫調用函數,linux c99調用也可以


huanfang = (int **)malloc(sizeof(int *)*N);
for (i = 0; i < N; i++)
{
huanfang[i] = (int *)malloc(sizeof(int)*N);
}
if (huanfang == NULL)
{
puts("內存開闢失敗!!");
}
for ( i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
huanfang[i][j] = 0;
printf("%5d ",huanfang[i][j]);//設置的數字寬度爲5
}
printf("\n");
}
printf("askjdfjashfasgsdg\n");
i = 0;
j = (int)(N + 1) / 2;
while (1)
{
if (huanfang[i][j] == 0)
{
huanfang[i][j] = count;
i = (i + 1) % N;
j =(abs (j + N - 1)) % N;
count++;
}
else
{
i = (abs(i + N - 1)) % N;
j = (j + 2) % N;
huanfang[i][j] = count;
i = (i + 1) % N;
j = (abs(j + N - 1)) % N;
count++;
}
if (count == (N*N+1))
{
break;
}
}




for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%5d ", huanfang[i][j]);//設置的數字寬度爲5
}
printf("\n");
}


system("pause");
return 0;

}


沒有優化,歡迎批評和討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章