成為數獨高手有哪些好的訓練方法?

時間 2021-05-30 23:17:51

1樓:喵喵Limo

數獨專業方法數獨學院介紹

數獨專業方法四角對角線法則

2樓:

多練習就很快了。

我之前有部諾基亞的6300,裡面有個Flash的數獨,每天利用空閒的時候玩會,從easy到hard有200關,我玩到199關。速度越來越快。

3樓:醜少女

自己要有興趣,然後沒事就玩這個,隨時玩。不開心的時候也玩。多了發現自己掌握的技巧會越來越多,拿過來乙個數獨,自己就會用最快的速度,將不同的方法一遍遍的過,乙個個解決

4樓:

50毫秒內解決數獨問題

這應該是我想到的解決數獨的最好方法了

首先,你需要做好禿頂,長痘,失眠多夢,看誰都sb,誰看你都覺得你情商低的心理準備

當然你還可能遇上美麗的尿尿聲音很大的女程式猿 @劉讚贊

然後開始學習各類編碼,然後編寫演算法,然後執行,然後看著數獨問題解除

喏,就像這樣去50毫秒解決數獨:

// 優化

int CNumMatrix::Optimize()

int x, y;

int i;

bool changed = true;

while(changed)

changed = false;

for(x = 0; x < m_iSize; x++)

for(y = 0; y < m_iSize; y++)

if(NumTrans(m_i16mMatrix[x][y]) == 0)

return -1;

if(m_cmPossible[x][y] == 1)

m_cmPossible[x][y] = 0;

for(i = 0; i < m_iSize; i++)

減少列可能性

if(m_cmPossible[x][i] > 0)

this->RemovePossible(x, i, m_i16mMatrix[x][y]);

if(m_cmPossible[x][i] == 0)

return -1;

減少行可能性

if(m_cmPossible[i][y] > 0)

this->RemovePossible(i, y, m_i16mMatrix[x][y]);

if(m_cmPossible[i][y] == 0)

return -1;

減少區域可能性

if(!RemoveRegionPossible(m_cmRegion[x][y], m_i16mMatrix[x][y]))

return -1;

m_iAssured++;

changed = true;

return 0;

// 數字翻譯

int CNumMatrix::NumTrans(__int16 mask)

mask &= ~(0xffff << m_iSize);

if(mask >= -1 && mask < 3)

return mask;

switch(mask)

case 0x0004:

return 3;

case 0x0008:

return 4;

case 0x0010:

return 5;

case 0x0020:

return 6;

case 0x0040:

return 7;

case 0x0080:

return 8;

case 0x0100:

return 9;

case 0x0200:

return 10;

case 0x0400:

return 11;

case 0x0800:

return 12;

case 0x1000:

return 13;

case 0x2000:

return 14;

case 0x4000:

return 15;

case 0x8000:

return 16;

return -1;

// 從檔案讀取

bool CNumMatrix::ReadFile(LPCTSTR fileName)

FILE * fp = fopen(fileName, "r");

if(fp)

int x, y;

char stmp = " ";

int tmp;

fscanf(fp, "%d %d, %d ", &m_iSize, &m_ivRegion[0], &m_ivRegion[1]);

if(m_iSize > 0 && m_iSize <= NM_MAX_SIZE && Init())

for(y = 0; y < m_iSize; y++)

for(x = 0; x < m_iSize; x++)

fscanf(fp, "%c", &stmp[0]);

if(stmp[0] == '?')

m_i16mMatrix[x][y] = -1;

m_cmPossible[x][y] = m_iSize;

else

sscanf(stmp, "%X", &tmp);

this->SetVal(x, y, NM_MAKE_MASK(tmp));

fscanf(fp, "%c", &stmp[0]);

else

fclose(fp);

return false;

fclose(fp);

return this->CheckPossibility();

return false;

// 匯出到檔案

bool CNumMatrix::WriteFile(LPCTSTR fileName)

FILE * fp = fopen(fileName, "w");

if(fp)

int x, y;

int tmp;

fprintf(fp, "%d %d, %d ", m_iSize, m_ivRegion[0], m_ivRegion[1], m_iAssured);

for(y = 0; y < m_iSize; y++)

for(x = 0; x < m_iSize - 1; x++)

tmp = NumTrans(m_i16mMatrix[x][y]);

if(tmp >= 0)

fprintf(fp, "%X ", tmp);

else

fprintf(fp, "? ");

tmp = NumTrans(m_i16mMatrix[x][y]);

if(tmp >= 0)

fprintf(fp, "%X ", tmp);

else

fprintf(fp, "? ");

fclose(fp);

return true;

return false;

// 減少區域可能性

bool CNumMatrix::RemoveRegionPossible(char region, __int16 mask)

int x, y;

for(x = 0; x < m_iSize; x++)

for(y = 0; y < m_iSize; y++)

if(m_cmRegion[x][y] == region && m_cmPossible[x][y] > 0)

RemovePossible(x, y, mask);

if(m_cmPossible[x][y] == 0)

return false;

return true;

// 可能性檢查

bool CNumMatrix::CheckPossibility()

int x, y;

int i;

m_iAssured = 0;

bool zero = false;

for(x = 0; x < m_iSize; x++)

for(y = 0; y < m_iSize; y++)

if(m_cmPossible[x][y] == 0)

m_iAssured++;

else

m_cmPossible[x][y] = m_iSize;

m_i16mMatrix[x][y] = -1;

if(m_iAssured)

for(x = 0; x < m_iSize; x++)

for(y = 0; y < m_iSize; y++)

if(m_cmPossible[x][y] == 0)

for(i = 0; i < m_iSize; i++)

減少列可能性

if(m_cmPossible[x][i] > 0)

this->RemovePossible(x, i, m_i16mMatrix[x][y]);

if(m_cmPossible[x][i] == 0)

return false;

減少行可能性

if(m_cmPossible[i][y] > 0)

this->RemovePossible(i, y, m_i16mMatrix[x][y]);

if(m_cmPossible[i][y] == 0)

return false;

減少區域可能性

if(!RemoveRegionPossible(m_cmRegion[x][y], m_i16mMatrix[x][y]))

return false;

return true;

// 查詢解

bool CNumMatrix::FindSolution()

static int si = 0;

if(Optimize() < 0)

return false;

if(m_iAssured == m_iSize * m_iSize)

return true;

CNumMatrix tmp;

// 查詢最小可能性的格仔

int x, y;

int mx = -1, my = -1;

char min = m_iSize + 1;

for(x = 0; x < m_iSize; x++)

for(y = 0; y < m_iSize; y++)

if(m_cmPossible[x][y] != 0 && m_cmPossible[x][y] < min)

mx = x;

my = y;

min = m_cmPossible[x][y];

// 取得可能性

__int16 possible[NM_MAX_SIZE];

if(mx == -1)

return false;

int sum = GetPossibleVal(mx, my, possible);

// 遍歷可能性

int i;

for(i = 0; i < sum; i++)

memcpy(&tmp, this, sizeof(CNumMatrix));

tmp.SetVal(mx, my, possible[i]);

if(tmp.CheckPossibility() && tmp.FindSolution())

memcpy(this, &tmp, sizeof(CNumMatrix));

return true;

return false;

有哪些訓練方法可以有效提高交易水平

Phoenix 道可悟而不可修 覺者以性施行,修者以行制性 悟者寡,而修者眾 倘若依靠訓練和學習就可以真正掌握交易,市場早已無法賺錢了關鍵在於提公升你對市場,對世界的認知,即悟道而非修道道可道非常道,他人道乃人間道,自身道乃修羅道 尋我先生 乙個能夠達到長期穩定盈利 賺大錢的交易者,最重要的素養表現...

求專業的5000公尺訓練方法有哪些,希望有二級運動員回答?

啦嚓哈 首先看你基礎水平 天賦 如何。乙個是你1000公尺能否跑到3分內或者接近3分。另乙個是體脂是否足夠低 比如身高172,體重60kg以內。體脂低在高強度訓練下更不容易受傷。如果上面兩項都達不到甚至差的,下面的訓練就別看了,在達到17分前一定會遇到瓶頸甚至受傷。訓練分三部分。第一部分 適應期3 ...

我的口音重,有什麼普通話訓練方法?

菠蘿 那請問你的貴州話水平怎麼樣?作為貴州人首先要講好母語,然後才是普通話。也就是講,追求普通話標準無問題但是必須在母語流利標準的前提下才能繼續追求這個,而不是不管自己的母語水平只追求普通話標準,因為普通話是否標準這個問題不好說,普通話取音地是河北灤平縣 典型的小地方 其他地方的人無必要以口音接近灤...