dfs相關練習題

2021-10-24 03:47:55 字數 4438 閱讀 1724

/*

* 給定整數序列a1,a2,...,an,判斷是否可以從中選出若干個數,使它們的和恰好為k

* 輸入:

* n=4

* a=

* k=13

* 輸出:

* yes(13=2+4+7)

*/public

class

_部分和

int k = sc.

nextint()

; kk = k;

dfs(a,k,0,

newarraylist

());

}public

static

void

dfs(

int[

] a,

int k,

int cur, arraylist

ints)

system.out.

println

(")");

system.

exit(0

);}if

(k <

0|| cur == a.length)

return

;//不要cur下標這個元素

dfs(a,k,cur+

1,ints)

;//要cur下標這個元素

ints.

add(a[cur]);

int index = ints.

size()

-1;dfs

(a,k-a[cur]

,cur+

1,ints)

; ints.

remove

(index)

;//回溯

}}

/*

* 在乙個x*y的網格中,乙個機械人只能走格點且只能向右或向下走,要從左上角走到右下角

* 計算機械人有多少種走法

* 給定兩個整數int x,int y,返回機械人的走法數目,保證x+y小於等於12

*/public

class

_機械人走方格

//利用遞迴解決

public

static

intsolve_1

(int i,

int j)

//不用遞迴

public

static

intsolve_2

(int i,

int j)

for(

int n =

0; n < i; n++

)for

(int m =

1; m < i ;m++)}

return arr[i-1]

[j-1];

}}

/*

* 問題:如果乙個字串包含兩個相鄰的重複子串,則稱它為容易的串,否則為困難的串

* 如,bb,abcdacabcab,abcdabcd是容易的串,d,dc,abdab,cbabcba都是困難的串

* * 輸入正整數n,l,輸出由前l個字元組成的,字典序第n小的困難的串

* 例如,當l=3時,前7個困難的串分別為:

* a,ab,aba,abac,abaca,abacab,abacaba

* n指定為4時,輸出abac

*/public

class

_困難的串

static

int count;

public

static

void

dfs(

int l,

int n, string prefix)}}

/* * 判斷prefix是否是乙個困難的串

* 1、遍歷所有長度為偶數的子串,看是否對稱

* 2、prefix是乙個困難的串

*/public

static

boolean

ishard

(string prefix,

char i)

return

true;}

}

/*

* 如下圖所示,玩家需要根據9*9盤面上的一直數字,推理出所剩餘空格的數字,並滿足每一行、每一列、每乙個同色九宮格內的數字均含1-9不重複

* 數獨的答案是唯一的,所以,多個解也稱為無解

* 輸入:

* 005300000

* 800000020

* 070010500

* 400005300

* 010070006

* 003200080

* 060500009

* 004000030

* 000009700

* 輸出:

* 145327698

* 839654127

* 672918543

* 496185372

* 218473956

* 753296481

* 984761235

* 521839764

*/public

class

_數獨遊戲

dfs(table,0,

0);}

public

static

void

dfs(

char

table,

int x,

int y)

if(table[x]

[y]==

'0')

} table[x]

[y]=

'0';

//回溯

}else

}public

static

boolean

check

(char

table,

int x,

int y,

int k)

//檢查小宮格

for(

int l =

(x/3)*

3;l<

(x/3+1

)*3;l++)}

return

true;}

public

static

void

print

(char

table)

}}

/*

* 輸入正整數n,對1-n進行排序,使得相鄰兩個數之和均為素數

* 輸出時從整數1開始,逆時針排序,同乙個環恰好輸出一次

* 輸入:6

* 輸出:

* 1 4 3 2 5 6

* 1 6 5 2 3 4

*/public

class

_素數環

public

static

void

dfs(

int n,

int[

] r,

int cur)

for(

int i =

2; i <= n; i++)}

}public

static

boolean

check

(int

r,int i,

int cur)

return

true;}

public

static

boolean

isp(

int k)

return

true;}

public

static

void

print

(int

r)system.out.

println()

;}}

/*

* 假設我們有8種不同面值的硬幣,用這些硬幣組合構成乙個給定的數值n

* 共有多少種組合方式

* 【華為面試題】1分2分5分的硬幣有三種,組合成1角,共有多少種組合

* 【創新工廠筆試】有1分2分5分10分四種硬幣,每種硬幣數量無限,給定n分錢,有多少種組合可以組成n分錢

*/public

class

_硬幣表示

*///假設有1元5元10元25元,要湊成100元

system.out.

println

(countways

(100))

;}public

static

intcountways

(int n),3

);}public

static

intcountwayscore

(int n,

int[

] coins,

int cur)

return res;

}}

函式相關練習題

1,寫函式,接收乙個引數 此引數型別必須是可迭代物件 將可迭代物件的每個元素以 相連線,形成新的字串,並返回.例如 傳入的可迭代物件為 1,天王 劉德華 返回的結果為 1 天王 劉德華 1 def func lst l1 for i in lst return join l1 print func ...

list相關實踐練習題

1.逗號 假定有下面這樣的列表 版本1def linklist spam spam 1 and spam 1 for i in spam 1 print i,end print spam 1 linklist spam 版本2 針對版本1中的linklist spam 函式,當使用linklist ...

函式相關的練習題

1 實現乙個函式,列印乘法口訣表,口訣表的行數和列數自己指定。例如 輸入9,輸出99口訣表,輸入12,輸出1212的乘法口訣表。define crt secure no warnings include include void multi int n putchar n int main 2 使用...