網絡世界中時常會遇到這類滑稽的算命小程序,實現原理很簡單,隨便設計幾個問題,根據玩家對每個問題的回答選擇一條判斷樹中的路徑(如下圖所示),結論就是路徑終點對應的那個結點。
現在我們把結論從左到右順序編號,編號從 1 開始。這里假設回答都是簡單的“是”或“否”,又假設回答“是”對應向左的路徑,回答“否”對應向右的路徑。給定玩家的一系列回答,請你返回其得到的結論的編號。
輸入格式:
輸入第一行給出兩個正整數:N(≤)為玩家做一次測試要回答的問題數量;M(≤)為玩家人數。
隨后 M 行,每行順次給出玩家的 N 個回答。這里用 y
代表“是”,用 n
代表“否”。
輸出格式:
對每個玩家,在一行中輸出其對應的結論的編號。
輸入樣例:
3 4 yny nyy nyn yyn
輸出樣例:
3 5 6 2
思想:這不是利用滿二叉樹的性質嗎,每一層的結點數為pow(2,n-1) , n 為層數 , 那么就好了,觀察圖片,我們可以發現,
對於每一層,如果是 'n' 的話,就加上pow(2,k) , k為當前層數-1,跟前面的 n 別亂 , n 是當前層數,k 是層數 -1。
#include<bits/stdc++.h> using namespace std; int main() { int n , m ; cin>>n>>m; string str; while(m--){ cin>>str; int sum = 1 ; int k = n-1; for(int i = 0 ; i < n ; i++){ if(str[i] == 'n') sum += pow(2,k); k--; } cout<<sum<<endl; } return 0; }