1. 程式人生 > 其它 >L1-071 前世檔案 (20分)

L1-071 前世檔案 (20分)

技術標籤:C語言

L1-071 前世檔案 (20分)

題目描述

L1-071 前世檔案 (20分)
在這裡插入圖片描述

網路世界中時常會遇到這類滑稽的算命小程式,實現原理很簡單,隨便設計幾個問題,根據玩家對每個問題的回答選擇一條判斷樹中的路徑(如下圖所示),結論就是路徑終點對應的那個結點。

在這裡插入圖片描述

現在我們把結論從左到右順序編號,編號從 1 開始。這裡假設回答都是簡單的“是”或“否”,又假設回答“是”對應向左的路徑,回答“否”對應向右的路徑。給定玩家的一系列回答,請你返回其得到的結論的編號。

樣例輸入
3 4
yny
nyy
nyn
yyn

樣例輸出
3
5
6
2

/*
	有題目可知,最小值為1,即結論1,最大值是結論2^N
	當為y的時候,表示是左子樹,因此,原有值不需要改動 
	當為n時,表示在右子樹,此時需要在原有值的基礎上 加上 當前結點所有的葉節點的一半 
*/
#include<stdio.h> #include<string.h> #include<math.h> char str[35]; int N,M; int main() { scanf("%d %d",&N,&M); int k = pow(2,N); // 計算出最大結論值 int index,n; for(int i=0;i<M;i++){ index = 1; // 每次迴圈,都要將結論值賦值為1 n = k; // 修改當前結點所擁有的葉節點,這個時候是根節點,所以置為 k scanf
("%s",str); for(int j=0;j<strlen(str);j++){ // 遍歷輸入的字串 if(str[j]=='n'){ // 若為 n ,則表示需要加上當前結點所擁有的葉節點個數的一半 index += (n/2); } n /= 2; // 每次迴圈,葉節點的數量都會減半 } printf("%d\n",index); // 輸出結果即可 } return 0; }