一道用遞規做的題目

2021-04-06 19:44:55 字數 2184 閱讀 7045

/*

題目:

在乙個線性七個格位置的圖上有兩種不同顏色的棋子a,b。排列如下圖所示,中間的位置

為空。a a ab b b

要求將a,b的現行位置交換,形成下圖中的排列:

b b ba a a

移動棋子的要求:

()每個格中只准放乙個棋子。

()任意乙個棋子均可移動一格放入空格內。

()任何的旗子不得跳躍兩個或兩個以上的旗子。(無論顏色相同)

()一方的旗子均可跳過另一方的旗子進入空格。

()任何乙個顏色旗子只能向前跳,不能像後跳。

程式設計完成相關的移動。並得出總共有都少種走法。

最好用c或c++實現

*/ /*

演算法分析:

只有乙個空格,有兩種走法:向前移動一格,向前跳一格;

不同的走法使空格的位置發生變化,而空格的位置又決定可以有那種走法;

所以應該有乙個根據空格位置決定走法的函式;

而走法函式會使空格的位置發生變化;

走法一:移動的規則:

只能向前,即對於a其座標只能變大一;對於b其座標只能變小一;

只能跳入空格,即座標對應值為空;

移動成功則空格座標變為此座標;再繼續選擇走法;

移動失敗則不變,換其他走法;

走法二:跳動的規則:

只能向前,即對於a其座標只能變大二;對於b其座標只能變小二;

只能跳入空格,即座標對應值為空;

a的座標+處必須為b,b的座標-處必須為a;

移動成功則空格座標變為此座標;再繼續選擇走法;

移動失敗則不變,換其他走法;

所以綜上所述,本程式需要乙個陣列char s=(a,a,a,' ',b,b,b);

需要標記空格位置的變數,int spaceindex;

需要記錄走法數目的變數,int gonum;

需要走動的函式用於選擇具體的走法去走,void go();

需要具體走法的函式兩個,void move();和void jump();

需要測試可以進行那種走法的函式:int test();

*/

#include

#include

using

namespace

std;

int

gonum=0;

char

o[7]=;

void

go(int* a_spaceindex,char

s);

void

move(int* a_spaceindex,char

s);

void

jump(int* a_spaceindex,char

s);

int

test(int* a_spaceindex,char

s);

void

print(char

s)

int

main(void)

;

int

spaceindex=3;

print(s);

go(&spaceindex,s);

cout

<

<

return 0;

}

void

go(int* a_spaceindex,char

s)

if(f&4 || f&8)

if(f==0)

}

}

int

test(int* a_spaceindex,char

s)

void

move(int* a_spaceindex,char

s)

if(f&2)

if(!(f&1) && !(f&2))//should always be false;using for debug;

}

void

jump(int* a_spaceindex,char

s)

if(f&8)

if(!(f&4) && !(f&8))//should always be false;using for debug;

}

一道this的題目

請問下面 中的this值指向的是全域性物件還是物件o?function f return c var o new f console.log o.constructor.name object這裡的this指向全域性物件,因為 c call without new。這裡用正常的方式呼叫的函式 c 所...

一道題目 intel

從序列中找四個四字子串形成十進位制數使之乘積最大 就是求四個最大的?我目前只想到如下辦法。這個題並不是關於複雜的演算法,其本意是要利用並行處理,但目前尚未考慮到 除了其中比較求最小值部分有希望用simd include int g teststring int main void int picke...

一道題目 移位

csdn上一道面試題 十進位制整數,計算對應的二進位制數包含多少個1,用位操作。int n 95625 int m 1 int num 0 for int i 0 i sizeof int 8 i cout num endl 讓1不斷移位去判斷與其對應位置是否為1 若是有符號整數 負數 原碼的補碼 ...