高手给出算24的算法
相信算24的游戏大家玩过吧!~请高手给出一个算24的算法,输入四个数,他们经过计算得24,最后的结果是给出所有可能的计算的公式!
例如:2,3,4,6 4*6*(3-2)=24
1,4,5,7 4*7-5+1=24
问题点数:20、回复次数:49Top
1 楼ouyh12345(五岭散人)回复于 2006-03-03 12:01:26 得分 0
列出四个数的所有排列
在排列中插括号和运算符
表达式求值Top
2 楼myhouwei(myhouwei)回复于 2006-03-03 13:06:10 得分 0
我也想了很旧,而且有无解的情况,如1,1,1,1Top
3 楼vecen(Eye*神)回复于 2006-03-03 13:32:50 得分 0
to:二楼的
我开始就想到那个方法,太麻烦了!
我想采用一种递归的方法,但一直没有思路!~
肯请大侠指教Top
4 楼wumingchenchao(一缕阳光)回复于 2006-03-03 13:34:56 得分 0
关注。markTop
5 楼fancn21th(猴猴)回复于 2006-03-03 14:23:43 得分 0
首先我是菜鸟,曾经想过这个题目结果思路和网络上的一些算法差不多
穷举
4个数字的组合是p44=4*3*2*1
运算符的组合是4*4*4
括号的.....
嘿嘿,然后自己想吧Top
6 楼cuibo1123(月满C楼)回复于 2006-03-03 14:34:44 得分 0
挺挑战~~~
想个算法:
24
/\
x & y
/\ /\
x1&y1 x2&y2
就是想办法来拆分24 已接近你输入的值
具体描述挺复杂~~
实现也不容易~~
呵呵Top
7 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 14:36:33 得分 0
上学的时候写过,
在家里,回去贴~~Top
8 楼yjshm(自由与成长)回复于 2006-03-03 15:45:19 得分 0
呵,用穷举法,吧。一般都 是这样做的。Top
9 楼lbing7(向青润老大学习!!!)回复于 2006-03-03 15:55:04 得分 0
我想的可能更笨:
用递归生成表达式串
再算表达式的值
Top
10 楼zzw820626(偶要分,偶要星星)回复于 2006-03-03 17:07:33 得分 0
从 4个树中任取 2个数
操作可以分成两类:
1,一类增加型:* ,+
2,另一类减少型:/,-
关于括号:任何一个表达式都可以转化为逆波兰表达式,所以说都可以去掉括号。
那么我们可以依据你波兰结算的方法:
1。先从4个数中任取两个,从四个操作符中任一个 总共 4*3*4 种可能 计算出结果result1
2。从深下的2个数中去一个,从剩下的3个操作符中取1个人 总共 2*3 中可能 计算结果 result2
3.还剩一次计算机会,从剩下的2个操作符中取一个 总共2种可能,如果result2>24选减少型操作,如果result224选增加型操作。 result2==24 无结果。实际可能性为1
总共的可能性为: 4*3*4*2*3*1=288
没有考虑1的特殊情况。不知道是否可行。
Top
11 楼qybao(阿宝)回复于 2006-03-03 17:12:42 得分 0
我也想了很旧,而且有无解的情况,如1,1,1,1
-------------------------------
(1+1+1+1)! //阶乘就可以Top
12 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 17:32:08 得分 0
注意,每个操作符只能使用一次啊!!Top
13 楼hldc(胡乱打造)回复于 2006-03-03 19:04:50 得分 0
网上的方法都是穷举法,没有其它的方法了。Top
14 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 19:15:59 得分 0
用排列组合实现的,限制了每个运算符只使用一次,找到一个结果就退出:
/*
// g24.cpp -- Try to get 24 use 4 number and basic operator.
// By adie ,2005-01-15 http://www.adintr.com
// Report bug to <webmaster@adintr.com>
*/
#include <iostream>
#include <string>
#include <cstdio> // need sprintf() and sscanf()
#include <conio.h> // need getch()
#include <algorithm> // need min() and count()
#include <boost/timer.hpp> // 测试用时
int times=0; // 记录失败的次数
class Combin // 组合类,可得到所有可能的组合
{
public:
Combin(int count,int select=1) // 从 count 个数中选取 select 个数
{
if(select>count)
throw std::string("Select Must Less Than Count");
m_data=new int[count];
m_point=new int[select];
m_descr=new std::string[count];
for(int i=0;i<select;++i)
m_point[i]=i;
m_count=count;
m_select=select;
}
~Combin(){ delete [] m_data; delete [] m_descr; delete [] m_point; }
bool Setdata(int index,int data,std::string desc="") // 设置待组合的数据
{
if(index>=m_count)
return false;
m_data[index]=data;
if(desc=="")
{
char tmb[16];
sprintf(tmb,"%d",data);
desc=std::string(tmb);
}
m_descr[index]=desc;
return true;
}
int Getdata(int i) // 返回组合后的第 i 个数据
{
if(i>=m_select)
throw std::string("Bad index of data!");
return m_data[m_point[i]];
}
std::string Getdesc(int i) // 返回组合后第 i 个数据的描述
{
if(i>=m_select)
throw std::string("Bad index of desc!");
return m_descr[m_point[i]];
}
int Getleftdata(int i) // 返回组合后第 i 个剩余的数据
{
return m_data[getleftid(i)];
}
std::string Getleftdesc(int i) // 返回组合后第 i 个剩余数据的描述
{
return m_descr[getleftid(i)];
}
bool Select() // 进行下一次组合,组合失败返回 false
{
for(int i=m_select-1;i>=0;--i)
{
if(m_point[i]<m_count-m_select+i)
{
m_point[i]++;
for(int j=i+1;j<m_select;++j)
m_point[j]=m_point[j-1]+1;
return true;
}
}
return false;
}
void Reset() // 重置组合为初始状态
{
for(int i=0;i<m_select;++i)
m_point[i]=i;
}
int Getcount() { return m_count; }
int Getselect() { return m_select; }
void Swapsel(int r1,int r2) // 交换两个组合中的数据,这个操作本不应该放在这个类中的,为了使用方便放弃的设计上的合理!勿笑!
{
if(r1>=m_select||r2>=m_select)
throw std::string("Bad index of swap!");
int t_int=m_data[m_point[r1]];
std::string t_str=m_descr[m_point[r1]];
m_data[m_point[r1]]=m_data[m_point[r2]];
m_descr[m_point[r1]]=m_descr[m_point[r2]];
m_data[m_point[r2]]=t_int;
m_descr[m_point[r2]]=t_str;
}
private:
int m_count,m_select;
int * m_data;
int * m_point;
std::string * m_descr;
int getleftid(int i)
{
if(i>=m_count-m_select)
throw std::string("Bad index of left data!");
int ind=-1;
++i;
do
{
--i;
++ind;
for(int j=0;j<m_select;++j)
if(m_point[j]==ind)
{
++ind;
j=0;
}
} while(i>0);
return ind;
}
};
Top
15 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 19:16:56 得分 0
bool Test24(Combin * num,Combin * oper); // 使用指定数据和操作符的组合能否得到 24
int main(int argc,char *argv[])
try
{
int input[4];
if(argc>=5)
for(int i=1;i<5;++i)
sscanf(argv[i],"%d",&input[i-1]);
else
{
std::cout<<"Input the data:";
std::cin>>input[0]>>input[1]>>input[2]>>input[3];
}
boost::timer mytime; // 开始计时!!
Combin number(4,2);
Combin operat(4,1);
number.Setdata(0,input[0]);
number.Setdata(1,input[1]);
number.Setdata(2,input[2]);
number.Setdata(3,input[3]);
operat.Setdata(0,'+',"+ ");
operat.Setdata(1,'-',"- ");
operat.Setdata(2,'*',"×");
operat.Setdata(3,'/',"÷");
if(!Test24(&number,&operat))
std::cout<<"inextricability! trid "<<times<<" times."<<std::endl;
std::cout<<"It takes "<<mytime.elapsed()<<" seconds for the task."; // 结束计时并显示
if(argc<=1) // 如果不是从命令行输入,按键后再结束
getch();
}
catch(std::string e)
{
std::cout<<e<<std::endl;
getch();
exit(0);
}
catch(...)
{
std::cout<<"Unknown Except!"<<std::endl;
getch();
exit(0);
}
bool getresult(char oper,int n1,int n2,int * result) // 返回两个数的运算结果,不能整除返回 false
{
switch(oper)
{
case '+':
*result=n1+n2;
return true;
case '-':
*result=n1-n2;
return true;
case '*':
*result=n1*n2;
return true;
case '/':
if(n2==0)
return false;
if(n1%n2!=0)
return false;
else
{ *result=n1/n2;
return true;
}
break;
default:
return false;
}
}
bool Gonext(Combin * num,Combin * oper,int result) // 进入更深一次测试
{
Combin snum(num->Getcount()-1,min(2,num->Getcount()-1));
Combin soper(oper->Getcount()-1,1);
char buff[512];
if(oper->Getdata(0)=='+'||oper->Getdata(0)=='-')
{
std::string s1=num->Getdesc(0),s2=num->Getdesc(1);
if(s1[0]=='('&&s1[s1.size()-1]==')')
s1=s1.substr(1,s1.size()-2);
if(oper->Getdata(0)=='+'&&s2[0]=='('&&s2[s2.size()-1]==')')
s2=s2.substr(1,s2.size()-2);
char * format="(%s%s%s)";
if(num->Getcount()==2)
format="%s%s%s";
sprintf(buff,format,s1.c_str(),oper->Getdesc(0).c_str(),s2.c_str());
}
else
sprintf(buff,"%s%s%s",num->Getdesc(0).c_str(),oper->Getdesc(0).c_str(),
num->Getdesc(1).c_str());
int i;
snum.Setdata(0,result,buff);
for(i=0;i<num->Getcount()-num->Getselect();++i)
snum.Setdata(i+1,num->Getleftdata(i),num->Getleftdesc(i));
for(i=0;i<oper->Getcount()-oper->Getselect();++i)
soper.Setdata(i,oper->Getleftdata(i),oper->Getleftdesc(i));
if(Test24(&snum,&soper))
return true;
return false;
}
bool Test24(Combin * num,Combin * oper)
{
int result;
do {
do {
if(num->Getcount()==1)
{
if(num->Getdata(0)==24)
{
int c_kh=std::count(&num->Getdesc(0).c_str()[0],&num->Getdesc(0).c_str()[0]+num->Getdesc(0).size(),'(');
if(c_kh>1)
++times;
else
{
std::cout<<num->Getdesc(0)<<"= 24"<<std::endl;
return true;
} }
else
++times;
}
else
{
if(getresult(oper->Getdata(0),num->Getdata(0),num->Getdata(1),&result))
if(Gonext(num,oper,result))
return true;
if(oper->Getdata(0)=='-'||oper->Getdata(0)=='/')
if(getresult(oper->Getdata(0),num->Getdata(1),num->Getdata(0),&result))
{
num->Swapsel(0,1);
if(Gonext(num,oper,result))
return true;
num->Swapsel(0,1);
}
}
} while(oper->Select());
oper->Reset();
} while(num->Select());
return false;
}
Top
16 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 19:20:56 得分 0
E:\My Work\ISOC++\g24>g24 1 2 3 4
inextricability! trid 628 times.
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 6 6 6 6
6×6- (6+ 6)= 24
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 100 20 30 40
inextricability! trid 456 times.
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 23 43 19 32
inextricability! trid 232 times.
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 2 3 4 6
4÷(3- 2)×6= 24
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 9 8 5 7
(5- 9+ 7)×8= 24
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 1000 200 30 10
inextricability! trid 508 times.
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 17 19 21 3
inextricability! trid 300 times.
It takes 0 seconds for the task.
E:\My Work\ISOC++\g24>g24 5 9 12 7
(5+ 9)×12÷7= 24
It takes 0 seconds for the task.Top
17 楼fcc_ecjtu(成)回复于 2006-03-03 19:49:13 得分 0
MarkTop
18 楼bombwang(王)回复于 2006-03-03 20:00:05 得分 0
mark
Top
19 楼ttlyfast()回复于 2006-03-03 20:16:42 得分 0
算法复杂程度相当与系统实现Top
20 楼ttlyfast()回复于 2006-03-03 20:18:08 得分 0
收藏Top
21 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 20:56:48 得分 0
时间隔得比较久了,只记得当初想法挺简单的,不知道怎么会写这么长。。。
首先从 4 个数中选择两个(C4:2),从四个操作符中选择一个进行运算(C4:1)得到一个结果(如果是减法或除法的话分两种情况计算),把这个结果合剩下的两个数放在一起,然后从这个三个数中选择两个(C3:2),从剩下的三个操作符中选择一个来运算,得到一个结果,继续和剩下的放在一起来进行组合,直到只剩下两个数为止。
中间如果遇到除不尽得情况则放弃这一次组合,继续下一组。
因为如果出现除不尽的话只有在之后用乘法才可能得到一个整数结果,而这种情况都可以在另一个先使用乘法的组合下找到,比如 x / y * z 中 x / y 得到一个小数,* z 后有变为整数,完全可以在另一种组合 x * z / y 中使中间过程不出现小数。
所以中间丢掉除不尽的情况不会丢掉可能的组合,而可以减少许多不必要的探测,提高速度Top
22 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-03 21:05:07 得分 0
中间为了跟踪每一种组合的组合过程,以便于输出增加了不少的复杂度,
现在看着也不知道怎么会写这么长啊。。。Top
23 楼51365133(渊海)回复于 2006-03-03 21:09:17 得分 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class data
{
private:
int m_num;
int m_bas;
public:
int add;
int dec;
int mul;
int div;
data(int num,int bas)//初始化数 和 基数
{
m_num=num;
m_bas=bas;
}
void init()//分解数
{
add=m_num+m_bas;//和
dec=m_bas-m_num;//差
mul=m_num*m_bas;//乘
if(m_num!=0)//除
div=m_bas/m_num;
else
div=0;
}
void putn(int *databuf)//讲分解的结果写到一个连续的存储空间
{
*databuf++=add;
if(dec>=0)
*databuf++=dec;
*databuf++=mul;
if((div*m_num)==m_bas)
*databuf++=div;
*databuf='\0';
}
};
void oder(int *num);
int main()
{
int base[4]={2,4,6,20};
//首先由小到大的排序
oder(base);
printf("排序结果:");
for(int i=0;i<4;i++)
printf("%d ",base[i]);
printf("\n");
data first(base[0],24);
first.init();
int *one=new int[4];
first.putn(one);
while(*one>=0)
{
data sencd(base[1],*one);
sencd.init();
int *two=new int[4];
sencd.putn(two);
while(*two>=0)
{
data thred(base[2],*two);
thred.init();
int *three=new int[4];
thred.putn(three);
while(*three>=0)
{
if (*three==base[3])
{
printf("首先%d和%d可以得到%d\n",base[3],base[2],*two);
printf("其次%d和%d可以得到%d\n",base[1],*two,*one);
printf("最后%d和%d可以得到24\n",base[0],*one);
system("pause");
return 1;
}
three++;
}
two++;
}
one++;
}
printf("can't");
system("pause");
return 0;
}
void oder(int *num)
{
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
if(num[i]<num[j])
{
int tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}
}
}Top
24 楼51365133(渊海)回复于 2006-03-03 21:10:53 得分 0
我分析了下,上边的用排序有点问题,其实应该用排列最好!!!Top
25 楼teacher1998(英语+asp.net+MsSQL)回复于 2006-03-03 23:24:04 得分 0
记下来Top
26 楼laolou_1983(太阳下山我下班)回复于 2006-03-04 09:37:36 得分 0
关注。。。Top
27 楼DigData(C'est la Vie)回复于 2006-03-04 09:58:48 得分 0
mark
Top
28 楼wanyong775(渔民:小小的网少年)回复于 2006-03-04 10:05:57 得分 0
markTop
29 楼101monster(毛毛虫)回复于 2006-03-04 10:08:12 得分 0
呵呵,不错,支持!Top
30 楼S_G_D(紫色)回复于 2006-03-04 12:12:23 得分 0
#include<iostream>
using namespace std;
int flag=0;
void f(int n[],int c[],int step)
{ int x1[4],x[4],y[4];
int i,j;
for(i=0;i<4;i++)
{ x[i]=n[i];
x1[i]=n[i];
y[i]=c[i];
}
if(step==4)
{ if(x[0]==24)
flag=1;
return;
}
else
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
{ i+=1-c[i];
j+=1-c[j];
y[j]=0;
x1[i]+=x1[j];
f(x1,y,step+1);
x1[i]=x[i];
x1[i]-=x1[j];
f(x1,y,step+1);
x1[i]=x[i];
x1[i]=x1[j]-x1[i];
f(x1,y,step+1);
x1[i]=x[i];
x1[i]*=x1[j];
f(x1,y,step+1);
x1[i]=x[i];
if(x1[j]&&!(x1[i]%x1[j]))
{ x1[i]/=x1[j];
f(x1,y,step+1);
x1[i]=x[i];
}
if(x1[i]&&!(x1[j]%x1[i]))
{ x1[j]/=x1[i];
f(x1,y,step+1);
x1[i]=x[i];
}
}
}
int main()
{ int n[4],c[4]={1,1,1,1};
cin>>n[0]>>n[1]>>n[2]>>n[3];
f(n,c,1);
if(flag)
cout<<"Yes!"<<endl;
else
cout<<"No!"<<endl;
return 0;
}
Top
31 楼S_G_D(紫色)回复于 2006-03-04 12:17:06 得分 0
I'v used the recursion in the code which in the upside,but I have found a bug myself.Top
32 楼firetoucher(风焱)回复于 2006-03-04 12:50:01 得分 0
你可以下载ICM99的程序看看,里面第一题貌似相似。
FYI,我以前的一个,后来没有管了http://blog.csdn.net/firetoucher/archive/2005/12/14/552171.aspxTop
33 楼DelphiGuy()回复于 2006-03-04 13:05:37 得分 0
加上运算符(包括括号),总共只有580608中可能。
先穷举生成查找表,每次查找就行了。
Top
34 楼systemx(-操!老子从不讲脏话的!阿弥陀佛!-)回复于 2006-03-04 13:35:18 得分 0
强帖。。收藏。。学习Top
35 楼fdimim(猿莫求愚√))回复于 2006-03-04 13:42:49 得分 0
++++++++++++++++++++++++++++++++++++++Top
36 楼lay6(6lay)回复于 2006-03-04 16:30:14 得分 0
递归。。。
4个数合3个数。。
3个数合2个数。。
2个数合1个数。。
1个数是24就成功。。。Top
37 楼wenxueqian()回复于 2006-03-04 18:45:18 得分 0
高手如云,佩服!Top
38 楼bbuugg(测试员)回复于 2006-03-04 23:06:58 得分 0
且慢说高手如云,俺测了一下给出的代码
结果如下:
adintr(www.adintr.com) 的代码
根本无法得出结果总是跳出一句
Select Must Less Than Count
To:51365133(渊海)
2 4 6 7 可以计算的2*7+4+6,可是你的代码说can't
To:S_G_D(紫色)
1 2 7 7 应该有解(7*7-1)/2,可是你的代码说No!Top
39 楼51365133(渊海)回复于 2006-03-05 03:26:20 得分 0
//个人分析,有一定的错误希望高手,进一步指点
我想首先说下24的算法逆序分析
给出4个数,确认我们的结果是24
//第一次取数 求组合
我们首先从4个数中取出一个数,和我们的结果24进行 求 加,减,乘,除 4个数的组合
因为得到的加减乘除的组合 和 我们取出的数 通过反向的 减,加,除,乘 是可以得到结果24
//第二次取数 求组合
然后从剩下的3个数中与 第一个数得到的加减乘除的组合 中的一个值 在进行 加减乘除 运算
这与上个数与24求 加减乘除的 思想是一样的.这次取出的数 通过反向操作可以得到上次的组合值
这次取出的数反向操作与上次取出的数相反操作同样可以得到24
//第三次取数 求组合
最后一次从剩下的2个数中取出一个值,与第2次得到 加减乘除组合中的一个数作 加减乘除 运算
这次得到的组合与前两次的思想是一样的
//最后判断 组合中的数是否与最后一个数相同
然后判断 第4个数,也就是剩下的数是否在最后一次得到的组合中出现,
如果出现的情况,表明:
第4个数与第3个数可以得到 第二次取数的组合中的一个值
第二次组合中的值与第2个取出的数,进行反向操作就得到了第一次组合中的一个值,
最后第1个数与第一次组合中的值可以得到24这个最终结果
这种分析,不是完全正确,但是希望给大家一定的帮助
渊海
Top
40 楼jsbanwjly(我自痴狂)回复于 2006-03-05 10:20:51 得分 0
MARKTop
41 楼bbuugg(测试员)回复于 2006-03-05 10:44:15 得分 0
To 51365133(渊海)
你的算法中对以下这种情况,如 5,7,8,10,无能为力
这道题只有一种解法 (5+7)*(10-8)
这种解法无法依靠每次取一个数的算法求得Top
42 楼strangerryf(白痴与白痴讨论的结果一定是比白痴更为白痴的结论)回复于 2006-03-05 10:50:43 得分 0
fxt,permutations
http://www.jjj.de/fxt/Top
43 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-05 11:04:46 得分 0
to bbuugg(测试员):
adintr(www.adintr.com) 的代码
根本无法得出结果总是跳出一句
Select Must Less Than Count
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
说说具体情况,
用的什么数据,
我运行的时候没有出现啊。。Top
44 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-05 11:28:00 得分 0
to bbuugg(测试员):
adintr(www.adintr.com) 的代码
根本无法得出结果总是跳出一句
Select Must Less Than Count
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
这里有一份编译好的,你再试试呢?
如果出现问题,记录一下是在哪组数据中出的问题吗
http://www.adintr.com/map.htm?id=down&arg=id=900005Top
45 楼bbuugg(测试员)回复于 2006-03-05 12:20:50 得分 0
To adintr(www.adintr.com)
我是用VC++6.0 window XP环境编译的。
另外http://www.adintr.com/map.htm?id=down&arg=id=900005
打不开Top
46 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-05 13:07:07 得分 0
to bbuugg(测试员) :
怎么会打不开啊,
能 ping 通么?
方便的话可以给个邮箱,我发给你吗。
或者再试试这个链接:
http://www.freefilehosting.net/?id=q9DxlazZ
另,我原来是用 gcc 编译的。Top
47 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-05 13:27:53 得分 0
另,我用 VC2003 编译了一下,会出现 Unknown Except! 异常,
这是程序中有点问题,把 Test24 函数中的
int c_kh=std::count(&num->Getdesc(0).c_str()[0],&num->Getdesc(0).c_str()[0]+num->Getdesc(0).size(),'(');
if(c_kh>1)
++times;
else
改为
std::string resout = num->Getdesc(0);
int c_kh = static_cast<int>(std::count(&(resout.c_str()[0]), &resout.c_str()[0] + resout.size(), '('));
if(c_kh>1)
++times;
else
Top
48 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-05 13:31:35 得分 0
在 gcc 中居然可以运行正常~~ 寒一个
这段代码限制了括号也只能使用一次,如果要去掉这个限制,可直接注释掉这段代码。
我这里没有 VC6.0, 所以没办法在 6.0 下试了。Top
49 楼wxyeeis(雨)回复于 2006-03-05 14:33:07 得分 0
markTop




