UVa 679 小球下落 二叉樹的編號

2022-02-01 12:14:10 字數 1432 閱讀 7589

在結點1處放乙個小球,它會往下落。每個內結點上都會有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,狀態都會改變。當小球到達乙個結點是,如果結點上的開關關閉,則往左走,否則往右走,直到走到葉子的結點,如圖。

【分析】

對於乙個結點k,其左結點和右結點分別為2k和2k+1。

小球落到結點處,先改變,後選擇。

【**】

1 #include2 #include3

const

int maxd = 20;4

int s[1

<

5int

main()18}

19 printf("

%d\n

",k/2

);20}21

return0;

22 }

【總結】

"<

1.過載輸出流運算子

2.資料移位運算子:x = i << 4 ; //將 i 的值左移4位放大2的4次方

memset(s,0,sizeof(s));

//一般用在對定義的字串進行初始化

memst( "初始化字串","初始化字元" ,"初始化字串的記憶體空間長度" ); 

sizeof():計算字串陣列的長度

sizeof 與 strlen區別:

1 har str[11]="

0123456789

";//

注意這裡str大小因該大於等於11,應考慮'\0'在內,否則編譯器會報錯

2int a=strlen(str); //

a=10; >>>> strlen 計算字串的長度,以結束符 0x00 為字串結束。

3int b=sizeof(str); //

而b=11; >>>> sizeof 計算的則是分配的陣列 str[11] 所佔的記憶體空間的大小,不受裡面儲存的內容改變。

1

//解法二: (目前還沒領悟 = =)2//

i,當i是奇數時,它是往左走的第(i+1)/2個小球;3//

當i是偶數時,它是往右走的第i/2個小球

45 #include6

intmain()

12else

13 printf("

%d\n

",k);14}

15return0;

16 }

UVa679 小球下落(樹)

給下落的深度和小球個數,小球依次下落,結點有個開關,每到乙個結點,開關關向左,開向右 一開始想到了簡單模擬,結果超時 include include include define maxn 20 using namespace std int s 1 printf d n now 2 return ...

UVa679小球下落(二叉樹的編號)

樹是n個元素的有限集合,不再是序列,其中 n 0 樹可以看成無共享純廣義表。二叉樹的3個要素,根結點,左子樹和右子樹。二叉樹不是樹,樹的兩個要素是根結點和子樹森林。無論線性結構還是樹形結構,第乙個元素都沒有前驅。線性結構的最後乙個元素都沒有後繼,樹形結構有多個葉子結點,都沒有後繼。對於中間的一般元素...

UVa679 完全二叉樹編號

這題我也是用了兩種方法,第一種比較常規,但超時,第二種比較討巧 運用完全二叉樹的性質,對於結點k,左子結點編號2k,右子結點編號2k 1,用乙個陣列表示當前每個結點狀態,然後模擬每個小球的下落過程 include using namespace std const int maxdeep 20 in...