注册 登录
编程论坛 C++教室

[求助]程序输不出结果

yqfang310 发布于 2006-12-10 15:37, 1264 次点击

#include<iostream.h>
struct point //定义一个结构体用来存放x,y
{
int x;
int y;
};
point MinMax(int A[], int low, int high) //寻找最大和最小元素
{
point p,p1,p2;
if((high -low) == 1)
{
if(A[high] > A[low])
{
p.x = A[low];
p.y = A[high];
return p;
}
else
{
p.x = A[high];
p.y = A[low];
return p;
}
}
else
{
int mid = (high - low)/2;
p1 = MinMax(A, low, mid);//递归调用
p2 = MinMax(A, mid+1, high);
if(p1.x > p2.x)
{
p.x = p2.x;
}
if(p1.x < p2.x)
{
p.x = p1.x;
}
if(p1.y > p2.y)
{
p.y = p1.y;
}
if(p1.y < p2.y)
{
p.y = p2.y;
}
return p;
}

}

void main()
{
point p3;//定义一个point类型的变量,用于接收返回值
int a[10]={1,23,24,1,6,23,34,2,54,6};
p3 = MinMax(a,0,9);
cout<<p3.x<<" "<<p3.y<<endl;

}

16 回复
#2
一二三四五2006-12-10 16:00
你想求什么?
#3
yqfang3102006-12-10 19:00

你不是吧,这样也不知道,求最小元素和最大元素啊

#4
zhubenben2006-12-10 21:40
在判断结构定义的常量大小时是不是应该应该
先定义个规则呢
规则如下:
定义 point 的两个向量 x1, x2
定义 x 为第一元素 y 为第二元素
当x1.x > x2.x时
x1 大于 x2
x2.x > x1.x 时类似
当 x1.x == x2.x 时
x1, x2 中哪个 y 大 则 谁大

这样函数的定义是不是就很简单了呢
也许我的思路不对,希望大家指正
谢谢

[此贴子已经被作者于2006-12-10 21:41:16编辑过]

#5
yqfang3102006-12-10 22:50
有没有人能帮我解决这个问题啊
#6
song42006-12-11 09:18

你自己试试不就知道了
你判断的太混乱了
改了就是重做了

#7
yqfang3102006-12-11 10:29

很混乱吗,一点都不混乱好不好,我已经自己改了,谢了

#8
一二三四五2006-12-11 12:06
改了就好
#9
liyueyu2006-12-11 22:57

结构体大括号多个;

#10
yqfang3102006-12-12 20:57
编程要遵守编程规范嘛
#11
yuyunliuhen2006-12-12 21:38

哎~~

#12
yqfang3102006-12-13 02:27
以下是引用yuyunliuhen在2006-12-12 21:38:48的发言:

哎~~

楼上为何??

#13
smartwind2006-12-15 11:23

把那四个判断改成3元运算符的形式会好很多
还有就是上面的判断条件最好改下,具体如下:
p.x=p1.x>p2.x?p1.x:p2.x;
p.y=p1.y<p2.y?p1.y:p2.y;

if(high-low<=1)

#14
wfpb2006-12-15 12:37

下面这样就可以了,你只是数据疏忽了3个地方


#include<iostream>
using namespace std;
struct point  //定义一个结构体用来存放x,y
{
    int x;
    int y;
};
point MinMax(int A[], int low, int high) //寻找最大和最小元素
{
    point p,p1,p2;
    if(high==low)
    {
        p.x=p.y=high;
        return p;
    }
    else if((high -low) == 1)
    {
        if(A[high] > A[low])
        {
            p.x = A[low];
            p.y = A[high];
            return p;
        }
        else
        {
            p.x = A[high];
            p.y = A[low];
            return p;
        }
    }
    else
    {
        int mid = (high + low)/2; //0-1;2-2;3-4;5-6;7-7;8-9
        p1 = MinMax(A, low, mid);//递归调用
        p2 = MinMax(A, mid+1, high);
        if(p1.x >= p2.x)
        {
             p.x = p2.x;
        }
        if(p1.x < p2.x)
        {
            p.x = p1.x;
        }
        if(p1.y >= p2.y)
        {
            p.y = p1.y;
        }
        if(p1.y < p2.y)
        {
            p.y = p2.y;
        }
        return p;
    }
}


int main()
{
    point p3;//定义一个point类型的变量,用于接收返回值
    int a[10]={1,23,24,1,6,23,34,2,54,6};
    p3 = MinMax(a,0,9);
    cout<<p3.x<<\"  \"<<p3.y<<endl;
    return 0;
}

#15
myisgood2006-12-27 12:44
楼主: 我就不知道 你编程的风格这么乱~~
要是在我门公司
老板 早就 抄了你~
递归 是这么用的么
你去把 数据结果在好好看三遍~~~
#16
hitlfy2006-12-27 18:21
我认为最基本的high-low=1就不对,这样mid会出现负数,一直减下去永远也不会有结果
/*请问大狭这个程序为什么在Turbo C2.0上编译通不过,而在VC++6.0就能通过*/
/*另外我还想问问如何在VC++6.0下对程序单步运行,以及查看每一不运行的结果以便查错*/
#include <stdio.h>
struct point
{
int x;
int y;
};
point MinMax(int A[],int low,int high)/*请问为什么显示语法错误Declaration syntax error*/
{
point p,p1,p2;
int mid;
if((high -low) == 1)
{
if(A[high] > A[low])
{
p.x = A[low];
p.y = A[high];
return p;
}
else
{
p.x = A[high];
p.y = A[low];
return p;
}
}
else
{
mid = (high - low)/2;
p1 = MinMax(A, low, mid);/*会永远减下去*//*mid=1,0,-1,-1,...*/
p2 = MinMax(A, mid+1, high);
if(p1.x > p2.x)
{
p.x = p2.x;
}
if(p1.x < p2.x)
{
p.x = p1.x;
}
if(p1.y > p2.y)
{
p.y = p1.y;
}
if(p1.y < p2.y)
{
p.y = p2.y;
}
return p;
}
}
main()
{
point p3;
int a[10]={1,23,24,1,6,23,34,2,54,6};
p3 = MinMax(a,2,5);/*实参给定2,5*/
printf("%d\n",p3.x);
printf("%d\n",p3.y);
}
#17
hitlfy2006-12-27 18:22
我认为最基本的high-low=1就不对,这样mid会出现负数,一直减下去永远也不会有结果
/*请问大狭这个程序为什么在Turbo C2.0上编译通不过,而在VC++6.0就能通过*/
/*另外我还想问问如何在VC++6.0下对程序单步运行,以及查看每一不运行的结果以便查错*/
#include <stdio.h>
struct point
{
int x;
int y;
};
point MinMax(int A[],int low,int high)/*请问为什么显示语法错误Declaration syntax error*/
{
point p,p1,p2;
int mid;
if((high -low) == 1)
{
if(A[high] > A[low])
{
p.x = A[low];
p.y = A[high];
return p;
}
else
{
p.x = A[high];
p.y = A[low];
return p;
}
}
else
{
mid = (high - low)/2;
p1 = MinMax(A, low, mid);/*会永远减下去*//*mid=1,0,-1,-1,...*/
p2 = MinMax(A, mid+1, high);
if(p1.x > p2.x)
{
p.x = p2.x;
}
if(p1.x < p2.x)
{
p.x = p1.x;
}
if(p1.y > p2.y)
{
p.y = p1.y;
}
if(p1.y < p2.y)
{
p.y = p2.y;
}
return p;
}
}
main()
{
point p3;
int a[10]={1,23,24,1,6,23,34,2,54,6};
p3 = MinMax(a,2,5);/*实参给定2,5*/
printf("%d\n",p3.x);
printf("%d\n",p3.y);
}
1