POJ2756:二叉樹

Description

如上圖所示,由正整數1, 2, 3, ...組成了一棵無限大的二叉樹。從某一個結點到根結點(編號是1的結點)都有一條唯一的路徑,比如從10到根結點的路徑是(10, 5, 2, 1),從4到根結點的路徑是(4, 2, 1),從根結點1到根結點的路徑上只包含一個結點1,因此路徑就是(1)。對於兩個結點x和y,假設他們到根結點的路徑分別是(x1, x2, ... ,1)和(y1, y2, ... ,1)(這裏顯然有x = x1,y = y1),那麼必然存在兩個正整數i和j,使得從xi 和 yj開始,有xi = yj , xi + 1 = yj + 1, xi + 2 = yj + 2,... 現在的問題就是,給定x和y,要求xi(也就是yj)。 Input 輸入只有一行,包括兩個正整數x和y,這兩個正整數都不大於1000。 Output 輸出只有一個正整數xi。 Sample Input
10 4
Sample Output
2

---------------------------------------------

簡單的遞歸題

每次讓較低高度的節點向上一個層次,直到兩個結點相遇。如果兩個節點位於同一層,並且它們不相等,可以讓其中任何一個先往上走,然後另一個再往上走,直到它們相遇

#include<iostream>
using namespace std;
int f(int x,int y)
{
	if(x==y)
		return x;
	else if(x>y)
		return f(x/2,y);
	else
		return f(x,y/2);
}
int main()
{
	int x,y;
	cin>>x>>y;
	cout<<f(x,y)<<endl;
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章