Uva 712 树计算布尔函数

该博客介绍了一道Uva 712题目,通过树形结构表示布尔函数,并讲解如何根据输入变量求解函数值。文章强调了解题思路清晰,主要涉及模拟算法,同时提到了空行问题对解题的影响。
摘要由CSDN通过智能技术生成

原题

简单题, 就是用一棵树来表示一个布尔函数然后对一些输入的变量求函数值
题目已经把意思和解题思路都描述清楚了, 直接模拟即可
最后又被空行坑了一次 - -||

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <list>
#include <cassert>
#include <iomanip>

#pragma warning(disable:4996) //关掉4996警告

/*
Uva 712
关键 : 树的顺序存储 + 模拟
*/

using namespace std;


int main( ) {
    //freopen("input.txt", "r", stdin);
    vector<int> order;
    bool leaves[1 << 8];
    int N, M, Case = 0;
    while ( cin >> N && N > 0 ) {
        string tmp, result;
        memset(leaves, 0, sizeof(leaves));
        order.clear( );
        for ( int i = 0; i < N; i++ ) {
            cin >> tmp;
            order.push_back(tmp.at(1) - '0');
        }
        cin >> tmp;
        for ( int i = 0; i < tmp.length( ); i++ ) {
            leaves[i] = tmp.at(i) - '0';
        }
        cin >> M;
        while ( M-- ) {
            cin >> tmp;
            int Node = 1;
            for ( int i = 0; i < order.size(); i++ ) {      // tmp.length() 和 order.size()必须是 N (否则出错)
                if ( tmp.at(order[i]-1) == '0' ) Node *= 2;
                else Node = Node * 2 + 1;
            }
            result.push_back(leaves[Node - (1 << N)]+'0');
        }
        cout << "S-Tree #" << ++Case << ":" << endl;
        cout << result << endl << endl;
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值