zoj 1150 S

zoj 1150 S,第1张

zoj 1150 S
#include<stdio.h>#include<string.h>#include<math.h>#include<ctype.h>#define MAXN 300int operation(int i, int *tree, int len){//找到叶子节点的值并返回     if(2*i+2 >= len) return tree[i];    else    {        if(tree[i] == 0) return operation(2*i+1, tree, len);        else return operation(2*i+2, tree, len);    }}int main(){    int n, i, j, m, sum, temp, flag, t, times, k, cnt = 0;    int s_Tree[MAXN], order[10], read[10];    char ch;    while(scanf("%d", &n) != EOF && n)    {        getchar();        i = flag = 0;        memset(order, 0, sizeof(order));        while((ch = getchar()) != 'n')        {//处理输入,将xn中的数放到数组order中  if(isdigit(ch)) {     order[i] = order[i]*10 + (ch - '0');     flag = 1; } else if(flag == 1) {     i++;     flag = 0; }        }        memset(s_Tree, 0, sizeof(s_Tree));        sum = (int)pow(2.0, (double)n) - 1; //找到叶子节点的存储位置先         m = (int)pow(2.0, (double)n);//叶子节点的数量         for(i=0; i<m; ++i, ++sum)        {//存放叶子节点的值  ch = getchar(); s_Tree[sum] = ch - '0';        }        scanf("%d", &m);        getchar();        for(i=0; i<m; ++i)        {//存放xn的0/1值到数组read中  for(j=1; j<=n; ++j) {     ch = getchar();     read[j] = ch - '0'; } getchar(); for(k=t=0; t<n; ++t) {//设定各非叶子节点的值即0或者1      times = (int)pow(2.0, (double)t);     while(times--) s_Tree[k++] = read[order[t]]; } if(i == 0) printf("S-Tree #%d:n", ++cnt); printf("%d", operation(0, s_Tree, sum));        }        printf("nn");    }    return 0;}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4924707.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存