pos機(jī)面試要求

 新聞資訊3  |   2023-08-18 17:23  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)面試要求,「軟帝學(xué)院」的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)面試要求的問題,今天pos機(jī)之家(www.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、pos機(jī)面試要求

pos機(jī)面試要求

八皇后問題,是一個(gè)古老而著名的問題,是回溯算法的典型案例。該問題是國(guó)際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8X8格的國(guó)際象棋上擺放八個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。 高斯認(rèn)為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,后來(lái)有人用圖論的方法解出92種結(jié)果。

求解過程:

采用遍歷的辦法,就是采用將每種情況都驗(yàn)證的辦法最終找出問題的解,但是蠻力遍歷的話,需要遍歷的數(shù)據(jù)量太大,計(jì)算時(shí)間花費(fèi)太大,所以在遍歷的過程中使用回溯法去掉許多不可能的分支,使問題的規(guī)模減小許多。

一個(gè)可行解可以這樣表示,用一個(gè)數(shù)組pos[N](N表示皇后的個(gè)數(shù),八皇后即為8)表示每一行的皇后應(yīng)該放在第幾列。從將第一個(gè)棋子放在第1行的第1列開始一直遍歷完這個(gè)棋子固定在這個(gè)位置的所有解,然后再將第一行的棋子固定在第一行的第二列,再次遍歷完所有的解,直到第一行的棋子放在最后的一列,再遍歷完,那么所有的解就都找出來(lái)了。因?yàn)槌绦虼a中已經(jīng)注釋非常詳細(xì),所以這里不再重復(fù)注釋了。程序代碼如下:

#include <iostream>

#include <bitset>

using namespace std;

#define N 4 /*設(shè)置棋盤寬度*/

char pos[N]; /*每一行的這一個(gè)棋子放置的位置:0~7*/

bitset<N> stat[N]; /*每一行的空閑位置(除去被行列對(duì)角線沖突的位置)*/

bitset<N> mask[N][N]; /*保存回溯過程中以前的狀態(tài),因?yàn)樵趯?duì)每一行回溯時(shí)當(dāng)時(shí)的狀態(tài)都不一樣

所以這個(gè)單元的大小是stat的N倍,以便保存N行各自的初始狀態(tài)*/

int g_count; /*統(tǒng)計(jì)有多少種解法*/

void print() /*打印出當(dāng)前的可行解*/

{

int i, j;

cout<<endl;

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

{

for(j=0; j < pos[i]; j++)

cout<<" - ";

cout<<" $ ";

for(j=pos[i]+1; j < N; j++)

cout<<" - ";

cout<<endl;

}

}

void queen(int n) /*皇后問題求解函數(shù)*/

{

int i, j;

if(~stat[n] == 0) /*如果這一行沒有空閑位置,這個(gè)分支求解失敗*/

return;

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

{

if(!stat[n].test(i)) /*test(i)測(cè)試第i個(gè)bit是否為1,為1返回ture*/

{

pos[n] = i;

if(n+1 == N) /*找到一個(gè)解*/

{

print();

g_count++;

return;

}

for(j=n+1; j < N; j++)

{

mask[n][j] = stat[j]; /*進(jìn)行新的遍歷前保存當(dāng)前未探測(cè)行的空閑狀態(tài)*/

/*從j=n+1開始保存,前面j=0~n的位置已經(jīng)保存過了,再保存意義也不大*/

stat[j].set(i); /*縱向標(biāo)記非空閑位置*/

if(i+j-n < N) stat[j].set(i+j-n); /*正對(duì)角線方向標(biāo)記非空閑位置*/

/*正對(duì)角線直線方程:I=kN+b(k=1)->i=n+b->b=i-n==>i-n+j即表示新的I值*/

if(i+n-j >= 0) stat[j].set(i+n-j); /*反對(duì)角線方向標(biāo)記非空閑位置*/

/*反對(duì)角線直線方程:I=kN+b(k=-1)->i=-n+b->b=i+n==>-(j)+i+n即表示新的I值*/

}

queen(n+1); /*本行探測(cè)完畢,進(jìn)行下一行的探測(cè)*/

for(j=n+1; j < N; j++)

stat[j] &= mask[n][j]; /*探測(cè)失敗,回退(返回上一次的狀態(tài))*/

}

}

}

int main(int argc, char* argv[])

{

int i,j;

g_count=0;

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

stat[i].reset();

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

for(j=0; j < N; j++)

mask[i][j].reset();

cout<<"result is:";

queen(0);

cout<<endl<<"總共有"<<g_count<<"種排法."<<endl<<endl;

system("pause");

return 0;

}

程序運(yùn)行結(jié)果截圖:

最后,開發(fā)這么多年我也總結(jié)了一套學(xué)習(xí)Java的資料,如果你在技術(shù)上面想提升自己的話,可以關(guān)注我,私信發(fā)送領(lǐng)取資料或者在評(píng)論區(qū)留下自己的聯(lián)系方式,有時(shí)間記得幫我點(diǎn)下轉(zhuǎn)發(fā)讓跟多的人看到哦。

以上就是關(guān)于pos機(jī)面試要求,「軟帝學(xué)院」的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)面試要求的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://www.afbey.com/newstwo/100778.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。