| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 292 人关注过本帖
标题:一个编程runtime error 问题,求高手指点一二!感激不尽!!
只看楼主 加入收藏
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
结帖率:64.29%
收藏
已结贴  问题点数:20 回复次数:3 
一个编程runtime error 问题,求高手指点一二!感激不尽!!
0025:二叉树查看提交统计提问时间限制: 3000ms内存限制: 65536kB
描述

如上图所示,由正整数1,2,3……组成了一颗二叉树,按顺序存储。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。

比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。

输入
输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。最后一组测试数据中包括两个0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目。
样例输入
3 12
0 0
样例输出
4
搜索更多相关主题的帖子: 正整数 二叉树 
2012-11-04 00:21
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
收藏
得分:0 
我是用栈的思想做的,结果呢出现runtime error,小弟现处于编程初级阶段,求高手指点一下!!
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct stack{
   int *arry;
   int top;
}stack;

void push(stack *p, int data){
    p->arry[++p->top] = data;
}

int pop(stack *p){
    int m = p->arry[p->top];
    p->top--;
    return m;
}

void f(int n, int m){
  int i;
  int count = 0;
  stack *p = new stack;
  p->arry = new int[n+2];
  p->top = -1;
  push(p,m);
  while(p->top != -1){
     i = pop(p);
     count ++;
     if(2*i <= n)
         push(p, 2*i);
     if(2*i + 1 <= n)
         push(p ,2*i+1);
  }
  cout<<count<<endl;
}

int main(){
    int n, m;
    while(cin>>m>>n){
      if(0 == n && 0 == m)
          break;
      else
          f(n, m);
    }
    return 0;
}
2012-11-04 00:28
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:20 
runtime error!
//一般数组越界啦,超出内存啦报错,你这个有可能栈溢出。


[ 本帖最后由 C_戴忠意 于 2012-11-4 08:25 编辑 ]

编程之路定要走完……
2012-11-04 08:23
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
收藏
得分:0 
这个方法比较笨,后来想出了一个简单的方法,一下子就通过了。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

void f(int m, int n){
    int count = 2;
    int i, j;
    j = i = m;
    while(2*i + 1 <= n){
       count += count;
       i = 2 * i + 1;
       j = 2 * j;
    }
    j = 2 * j;
    if(j <= n)
        count += n - j + 1;
    cout<< --count<<endl;
}

int main(){
   int n, m;
   while(cin>> m >> n){
     if(0 == m && n ==0)
         break;
     else
         f(m,n);
   }
   return 0;
}
2012-11-05 10:03
快速回复:一个编程runtime error 问题,求高手指点一二!感激不尽!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033201 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved