最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言魔方陣的三種實現(xiàn)方法

 更新時間:2021年12月07日 09:54:29   作者:編程小程  
大家好,本篇文章主要講的是C語言魔方陣的三種實現(xiàn)方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

魔方陣:

把1到n*n排成n行n列方陣,使方陣中的每一行、每一列以及對角線上的數(shù)之和都相同,即為n階魔方陣。

根據(jù)魔方陣的規(guī)律,我將它分為三種情況。

1.奇數(shù)階魔方陣?

規(guī)律:第一個數(shù)放在第一行的中間,下一個數(shù)放在上一個數(shù)的上一行下一列,若該位置已經(jīng)有了數(shù)字即放在上個數(shù)的下面一行的相同列

用C語言編程如下:

示例:n=5;

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
 void Magic1()
{
#define ROW 5
#define COL ROW
assert(ROW % 2 != 0);  //判斷n是否為奇數(shù)
 
int arr[ROW][COL] = { 0 }; //定義二維數(shù)組
 
int currow = 0;
int curcol = COL / 2;
arr[currow][curcol] = 1;
for (int i = 2; i <= ROW * COL; i++) 
{
	if (arr[(currow - 1 + ROW) % ROW][(curcol + 1) % COL] == 0) //按照規(guī)律賦值
	{
		currow = (currow - 1 + ROW) % ROW;
		curcol = (curcol + 1) % COL;
	}
	else 
	{
		currow = (currow + 1) % ROW;
	}
	arr[currow][curcol] = i;
}
 
for (int i = 0; i < ROW; i++)  //打印魔方陣
{
	for (int j = 0; j < COL; j++)
	{
		printf("%-3d", arr[i][j]);
	}
	printf("\n");
}
 
}
int main()
{
	 
	Magic1();
	return 0;
}

結(jié)果:

2.偶數(shù)階魔方陣 (n=4K)

規(guī)律:按數(shù)字從小到大,即1,2,3……n順序?qū)δХ疥噺淖蟮接遥瑥纳系较逻M行填充;
將魔方陣分成若干個4×4子方陣(如:8階魔方陣可分成四個4×4子方陣),將子方陣對角線上的元素取出;將取出的元素按從大到小的順序依次填充到n×n方陣的空缺處。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//偶數(shù)魔方陣 4K 
void Magic2()
{
#define ROW 8
#define COL ROW
	int tmp = 1;
	int arr[ROW][COL] = { 0 };  //定義二維矩陣
	for (int i = 0; i < ROW; i++) 
	{
		for (int j = 0; j < COL; j++)
		{
			arr[i][j] = tmp++;
		}
	}
	int row1 = 1;
	int col1 = 1;
 
	int row2 = 1;
	int col2 = 1;
 
	for (int i = 0; i < (ROW / 4) ; i++)
	{
		for (int j = 0; j < (COL / 4); j++)
		{
			row1 = 4 * i;
			col1 = 4 * j;
			row2 = 4 * i;
			col2 = 4 * j + 3;
			for (int k = 0; k < 4; k++)
			{
				arr[row1][col1] = (ROW * COL + 1) - arr[row1][col1];
				arr[row2][col2] = (ROW * COL + 1) - arr[row2][col2];
				row1++;
				col1++;
				row2++;
				col2--;
			}
		}
	}
 
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			printf("%-3d", arr[i][j]);
		}
		printf("\n");
	}
 
}
int main()
{
	Magic2();
	return 0;
}

結(jié)果:?

3.偶數(shù)階魔方陣 (n=4K+2)

規(guī)律:

3.1.填充規(guī)則

將魔方分成A、B、C、D四個k階奇方陣, 利用奇數(shù)魔方陣填充方法依次將A、D、B、C填充 。

3.2.交換規(guī)則? ? ??上下標記的數(shù)字進行交換
1.右半邊大于k+2的列(從1開始)
2.左半邊,上下兩個塊最中心的點進行交換
3.左半邊小于中心列的列(除了上下半邊最中心的行的第一列的那個值不用交換)(從1開始)

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
 
void Magic3()
{
#define ROW 10 
#define COL ROW
	assert(ROW % 2 == 0 && ROW % 4 != 0);
	int arr[ROW][COL] = { 0 };
	//左上角
	int currow = 0;
	int curcol = ROW/4;
	arr[currow][curcol] = 1;
	int tmp = 0;
	for (int i = 2; i <= ROW * COL/ 4; i++)
	{
		if (arr[(currow - 1 + ROW / 2) % (ROW / 2)][(curcol + 1) % (COL / 2)] == 0)  //判斷上一行下一列是否被賦值
		{
			currow = (currow - 1 + ROW / 2) % (ROW / 2);
			curcol = (curcol + 1) % (COL / 2);
		}
		else
		{
			currow = (currow + 1) % (ROW / 2);
 	
		}
		arr[currow][curcol] = i;
	}
 
	//右下角
	currow = ROW / 2;
	for (int i = 0; i < ROW / 2; i++, currow++)
	{
		curcol = COL / 2;
		for (int j = 0; j < COL / 2; j++, curcol++)
		{	
			arr[currow][curcol] = arr[i][j] + 9;
		}
	}
	//右上角
	currow = 0;
	for (int i = ROW/2; i < ROW ; i++, currow++)
	{
		curcol = COL / 2;
		for (int j = COL/2; j < COL; j++, curcol++)
		{	
			arr[currow][curcol] = arr[i][j] + 9;
		}
	}
	//左下角
	currow = ROW / 2;
	for (int i = 0; i < ROW/2; i++, currow++)
	{
		curcol = 0;
		for (int j = COL/2; j < COL; j++, curcol++)
		{
			arr[currow][curcol] = arr[i][j] + 9;
		}
	}
 
	//替換規(guī)則1:右半邊 大于k+2的列  進行上下交換
	for (int i = 0; i < ROW / 2; i++)
	{
		for (int j = ROW / 2 + ROW / 4 + 2; j < COL; j++)
		{
			tmp = arr[i][j];
			arr[i][j] = arr[i + ROW / 2][j];
			arr[i + ROW / 2][j] = tmp;
		}
	}
	//替換規(guī)則2:交換左半邊,兩個中心節(jié)點
	currow = ROW / 4;
	curcol = COL / 4;
	tmp = arr[currow][curcol];
	arr[currow][curcol] = arr[currow + ROW / 2][curcol];
	arr[currow + ROW / 2][curcol] = tmp;
 
	//替換規(guī)則3:左半邊,除(K+1,1)這個點外,小于k+1的列  上下交換
	for (int j = 0; j < ROW / 4; j++) //表示交換的列
	{
		for (int i = 0; i < ROW / 2; i++) //表示交換的行
		{
			if (i == ROW / 4 && j == 0)
			{
				continue;
			}
			else
			{
				tmp = arr[i][j];
				arr[i][j] = arr[i + ROW / 2][j];
				arr[i + ROW / 2][j] = tmp;
			}
		}
	}
	//打印
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			printf("%-3d", arr[i][j]);
		}
		printf("\n");
	}
}
 
int main()
{
	Magic3();
	return 0;
}

結(jié)果:?

到此這篇關(guān)于C語言魔方陣的三種實現(xiàn)方法的文章就介紹到這了,更多相關(guān)C語言魔方陣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)讀取特定路徑下文件夾及文件名的方法

    C++實現(xiàn)讀取特定路徑下文件夾及文件名的方法

    這篇文章主要介紹了C++實現(xiàn)讀取特定路徑下文件夾及文件名的方法,需要的朋友可以參考下
    2014-07-07
  • Qt掃盲篇之QRegExp正則匹配類總結(jié)

    Qt掃盲篇之QRegExp正則匹配類總結(jié)

    這篇文章主要給大家介紹了關(guān)于Qt掃盲篇之QRegExp正則匹配類總結(jié)的相關(guān)資料,QRegExp是Qt框架中的一個類,用于進行正則表達式的匹配和處理,它提供了多種模式來匹配不同的字符串,需要的朋友可以參考下
    2023-12-12
  • KMP 算法實例詳解

    KMP 算法實例詳解

    這篇文章主要介紹了KMP 算法實例詳解的相關(guān)資料,MP的關(guān)鍵是求出next的值、先預(yù)處理出next的值,需要的朋友可以參考下
    2017-07-07
  • C/C++ Qt QChart繪圖組件的具體使用

    C/C++ Qt QChart繪圖組件的具體使用

    QtCharts 組件是QT中提供圖表繪制的模塊,用來繪制常規(guī)圖形,本文就詳細的介紹了QChart的使用,以及柱狀圖,折線圖等常用的圖形的實現(xiàn),感興趣的可以了解一下
    2021-11-11
  • 一篇文章教你3分鐘如何發(fā)布Qt程序

    一篇文章教你3分鐘如何發(fā)布Qt程序

    這篇文章主要給大家介紹了關(guān)于教你3分鐘如何發(fā)布Qt程序的相關(guān)資料,文中通過實例代碼結(jié)束的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++ 右值語義相關(guān)總結(jié)

    C++ 右值語義相關(guān)總結(jié)

    這篇文章主要介紹了C++ 右值語義的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C++?數(shù)據(jù)結(jié)構(gòu)超詳細講解順序表

    C++?數(shù)據(jù)結(jié)構(gòu)超詳細講解順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-03-03
  • OpenCV實現(xiàn)相機標定示例詳解

    OpenCV實現(xiàn)相機標定示例詳解

    相機標定是圖像處理的基礎(chǔ),現(xiàn)在市面上買到的相機,都存在著或多或少的畸變。本文將介紹如何利用一系列棋盤照片進行攝像機標定的,感興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • C++構(gòu)造函數(shù)詳解

    C++構(gòu)造函數(shù)詳解

    這篇文章主要介紹了C++構(gòu)造函數(shù)詳解,上一篇文章我們介紹了定義了類,在使用之前,往往還需要對類進行初始化。這篇介紹的就是對類進行初始化的方法,需要的朋友可以參考一下
    2022-01-01
  • C++使用CriticalSection實現(xiàn)線程同步實例

    C++使用CriticalSection實現(xiàn)線程同步實例

    這篇文章主要介紹了C++使用CriticalSection實現(xiàn)線程同步實例,是使用CriticalSection對前文實例的擴展,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-10-10

最新評論

松阳县| 马尔康县| 黄陵县| 黄大仙区| 台中县| 南木林县| 连州市| 天镇县| 商丘市| 故城县| 泌阳县| 梅河口市| 双江| 铜川市| 浪卡子县| 九龙县| 芦山县| 两当县| 武汉市| 赤水市| 师宗县| 礼泉县| 南开区| 磐石市| 临安市| 时尚| 通许县| 南宁市| 黄骅市| 中卫市| 湖口县| 苏尼特左旗| 荣昌县| 杭锦后旗| 清水河县| 姚安县| 扎鲁特旗| 张家界市| 垫江县| 遵义市| 伽师县|