當前位置:首頁 » 課程大全 » 魔方矩陣課程設計總結

魔方矩陣課程設計總結

發布時間: 2021-03-02 11:32:45

⑴ C++魔方矩陣問題

增加源一個Int變數K,並令它的初始值為0;
將if 語句改為:
for(int i=1;i<12;i++)
{if(sum[i]==sum[0])
k++;}
if(k==11)//12個sum都相等
cout<<"該矩陣是魔方矩陣"<<endl;
else cout<<"該矩陣不是魔方矩陣"<<endl;
這樣就可以了。

⑵ matlab 魔方矩陣的程序設計

^function M = magic(n)
%MAGIC Magic square.
% MAGIC(N) is an N-by-N matrix constructed from the integers
% 1 through N^ with equal row, column, and diagonal sums.
% Proces valid magic squares for all N > 0 except N = 2.

% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 5.15 $ $Date: 2002/04/15 03:44:23 $

% Historically, MATLAB's magic was a built-in function.
% This M-file uses a new algorithm to generate the same matrices.

n = floor(real(double(n(1))));

% Odd order.
if mod(n,2) == 1
[J,I] = meshgrid(1:n);
A = mod(I+J-(n+3)/2,n);
B = mod(I+2*J-2,n);
M = n*A + B + 1;

% Doubly even order.
elseif mod(n,4) == 0
[J,I] = meshgrid(1:n);
K = fix(mod(I,4)/2) == fix(mod(J,4)/2);
M = reshape(1:n*n,n,n)';
M(K) = n*n+1 - M(K);

% Singly even order.
else
p = n/2;
M = magic(p);
M = [M M+2*p^2; M+3*p^2 M+p^2];
if n == 2, return, end
i = (1:p)';
k = (n-2)/4;
j = [1:k (n-k+2):n];
M([i; i+p],j) = M([i+p; i],j);
i = k+1;
j = [1 i];
M([i; i+p],j) = M([i+p; i],j);
end

⑶ 魔方矩陣的介紹

魔方矩陣是有相同的行數和列數,並在每行每列、對角線上的和都相等。你能構造任何大小(除了2x2)的魔方矩陣。

⑷ 什麼是魔方矩陣

魔術矩陣是由一個n×n(n為奇數)的整數矩陣構成,矩陣中的整數值是從1~n^2[n的平方]。每一行,每一列和兩個對角線上數值之和是一樣的。

下面我以n=5的魔術矩陣為例,給出詳細的說明

15
8
1
24
17

16
14
7
5
23

22
20
13
6
4

3
21
19
12
10

9
2
25
18
11

這個n為5的魔術矩陣,他的每一行,每一列,兩個對角線的和均為65

演算法設計:

先在矩陣第一行中間的位置上放1,然後把數字按照升序沿著左上角放置到矩陣中。如果越界了,就假設周圍還有一個矩陣,將數字放到那個位置上;如果那個位置已經被占據了,就跳過該位置放到下面的位置,然後重新按照原來的方法放。如圖:在5×5的魔術矩陣中,放完1以後,就把2放到1的左上角,但是此時已經越界了。假設,在原來的矩陣上面還有一個矩陣,則數字2所放的位置應該是在最後一行的第二個位置,接下去就要把數字3放到2的左上角,依次放下去,當放到6的時候,由於1已經將下一個位置佔了,所以就放到5下面的位置。依照這樣的規律直到把數字都放完。

程序設計:

#include
#define Max_Size 15
void main()
{
static int square[Max_Size][Max_Size];
int i,j,row,column,count,size;
printf("輸入的矩陣大小:\n");
scanf("%d",&size);
if(size<1||size>Max_Size+1)
{
printf("輸入的矩陣太大!");
//exit(1);
}
if(!(size % 2))
{
printf("大小不能為偶數");
//exit(1);
}
for(i=0;i for(j=0;j square[i][j] = 0;
square[0][(size-1)/2] = 1;
i = 0;
j = (size-1)/2;
for(count=2;count<=size*size;count++)
{
row = (i-1<0)?(size-1):(i-1);
column=(j-1<0)?(size-1):(j-1);
if(square[row][column])
i=(++i)%size;
else
{
i = row;
j = (j-1<0)?(size-1):--j;
}
square[i][j] = count;
}
printf("大小為%d的魔術矩陣為:\n",size);
for(i=0;i {
for(j=0;j {
printf("%4d",square[i][j]);
}
printf("\n");
}

}

程序輸出:

輸入的矩陣大小:

5

大小為5的魔術矩陣為:

15 8 1 24 17

16 14 7 5 23

22 20 13 6 4

3 21 19 12 10

9 2 25 18 11

⑸ 1至10次的魔方矩陣

對平面魔方的構造,分為三種情況:N為奇數、N為4的倍數、N為其它偶數(4n+2的形式)

N
為奇數時,最簡單
(1)
將1放在第一行中間一列;
(2)
從2開始直到n×n止各數依次按下列規則存放:

45°方向行走,如向右上
每一個數存放的行比前一個數的行數減1,列數加1
(3)
如果行列范圍超出矩陣范圍,則回繞。
例如1在第1行,則2應放在最下一行,列數同樣加1;
(4)
如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,
則把下一個數放在上一個數的下面。

N為4的倍數時
採用對稱元素交換法。
首先把數1到n×n按從上至下,從左到右順序填入矩陣
然後將方陣的所有4×4子方陣中的兩對角線上位置的數關於方陣中心作對
稱交換,即a(i,j)與a(n+1-i,n+1-j)交換,所有其它位置上的數不變。
(或者將對角線不變,其它位置對稱交換也可)

N
為其它偶數時
當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。
按上述奇數階魔方給分解的4個子方陣對應賦值
上左子陣最小(i),下右子陣次小(i+v),下左子陣最大(i+3v),上右子陣次大(i+2v)
即4個子方陣對應元素相差v,其中v=n*n/4
四個子矩陣由小到大排列方式為




然後作相應的元素交換:a(i,j)與a(i+u,j)在同一列做對應交換(j<t或j>n-t+2),
a(t-1,0)與a(t+u-1,0);a(t-1,t-1)與a(t+u-1,t-1)兩對元素交換
其中u=n/2,t=(n+2)/4
上述交換使每行每列與兩對角線上元素之和相等。

⑹ 關於matlab 魔方矩陣的

A = magic(10);

A(1,:)表示第一行,回A(2,:)表示答第二行,...,依次類推
A(:,1)表示第一列,A(:,2)表示第二列,...,依次類推

diag(A)表示主對角線的元素

diag(fliplr(A))表示副對角線的元素

sum函數用來求和,比如
sum(A(1,:)) 返回的就是矩陣第一行元素之和,依次類推

至於最後一問:
[rows,cols,vals] = find( 40<A & A<60 );
for i=1:length(rows)
A(rows(i),cols(i))=NaN;
end;

⑺ 魔方矩陣的演算法設計

先在矩陣第一行中間的位置上放1,然後把數字按照升序沿著左上角放置到矩陣中。內如果越界了,容就假設周圍還有一個矩陣,將數字放到那個位置上;如果那個位置已經被占據了,就跳過該位置放到下面的位置,然後重新按照原來的方法放。如圖:在5×5的魔術矩陣中,放完1以後,就把2放到1的左上角,但是此時已經越界了。假設,在原來的矩陣上面還有一個矩陣,則數字2所放的位置應該是在最後一行的第二個位置,接下去就要把數字3放到2的左上角,依次放下去,當放到6的時候,由於1已經將下一個位置佔了,所以就放到5下面的位置。依照這樣的規律直到把數字都放完。

⑻ 魔方矩陣的魔方函數

Matlab中自動生成魔方矩陣的函數:
magic(n) n是矩陣維數,例如在MATLAB命令窗口輸入
magic(5) ,將隨機產生5階魔方陣。

⑼ matlab中的魔方矩陣(簡單問題)

1魔方矩陣是方陣
2.計算魔方矩陣某一行的和:sum(A(a,:))
計算魔方矩陣某一列的和:sum(A(:,a))
計算魔方矩陣對角線的和:sum(diag(A))

⑽ 求助C語言高手,關於魔方矩陣的問題

#include <stdio.h>
#include <conio.h>
#define N 15

void main()
{
int iArr[N][N] = {0}; /*魔法陣數組*/

/*定義變數,i,j為循環控制變,iNum表示數組的行數列數,iPox、iPoy分別代表數組的行數、列數,iPosx、iPosy分別代表保存數組行數變數,保存數組列數變數*/
int i = 0, j = 0, iNum = 0, iPosx = 0, iPosy = 0, iPox = 0, iPoy = 0;

printf("input the number:\n"); /*輸入數組的行數列數*/
scanf("%d",&iNum);

if (iNum % 2 == 0 || iNum > 15 || iNum <= 0) /*判斷iNum是否為奇數*/
{
printf("ERROR!"); /*偶數,輸出錯誤提示*/
}
else
{ /*為奇數,進行處理*/
iPox = 0;
iPoy = iNum / 2; /*算出1所在的位置*/
for (i=1; i<=iNum*iNum; i++)
{
iArr[iPox][iPoy] = i;

iPosx = iPox;
iPosy = iPoy;

if (iPox == 0) /*如果上一個數的行數為第一行,則下一個數的行數為最下一行,列數同樣加1;*/
{
if (iPoy != iNum-1) /*上一個數是第一行最後一列時,則把下一個數放在上一個數的下面*/
{
iPox = iNum-1;
}
else
{ /*每一個數存放的行比前一個數的行數減1,列數加1(右上方)*/
iPox++;
iPoy--;
}
}
else
{
iPox--;
}

if (iPoy == iNum-1) /*當上一個數的列數為最後一列時,下一個數的列數應為第一列,行數減去1;*/
{
iPoy = 0;
}
else
{
iPoy++;
}

if (iArr[iPox][iPoy] != 0) /*如果按上面規則確定的位置上已有數時,則把下一個數放在上一個數的下面*/
{
iPox = iPosx+1;
iPoy = iPosy;
}

}

printf("The array is :\n");
for (i=0; i<iNum; i++) /*輸出該數組*/
{
for (j=0; j<iNum; j++)
{
printf("%3d",iArr[i][j]);
}

printf("\n");
}
}

getch();
}

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919