源程序:
现在加注释如下:其中 不显示“can not get 24!” 已经更改,试试吧
#include"stdio.h"
#include"iostream"
using namespace std
int number(int a,int b,int c,int d )
char m[]={'+','-','*','/'}//运算符
int main(){
// int a,b,c,d,e,i,n//定义变量,n没有初始化,应定义为0改为如下
int a,b,c,d,e,i,n=0//定义变量,n初始化为0
cout<<"please input 4 numbers(1~9):"<<endl//输出提示信息。
cin>>a>>b>>c>>d//输入四个数
for(i=0i<4i++){//轮换四次,所有可能的运算都包括在内了。
if(i==0)//第一次
{//不交换数值。
if(number(a,b,c,d))
n++//成功计数加1
}
else //否则交换数值
{ e=aa=bb=cc=dd=e
if(number(a,b,c,d))
n++
}}
if(!n)//没有一次成功
printf("can not get 24!\n")//显示不能构成24点
return 0
}
//运算子类
class sum{
public:
sum():c('+'){}
double operator() (double x,double y)函数运算符 operator()
char c//运算符
}
////////////////////////////////////////////////
//计算函数的实现
// C++的函数运算符 operator()可以带任意多个参数,这里带两个参数。
double sum::operator() (double x,double y){
switch(c){ 根据 运算符c ,来实现加减乘除等,不同的运算
case '+':
return x+y
case '-':
return x-y
case '*':
return x*y
case '/':
if(y==0) return 0xFFFFFFFF
return x/y
default:
return 0
}
}sum f,g,h//定义三个算子,四个数用完,只要计算三次。
int number(int a,int b,int c,int d ){
(double)a(double)b(double)c(double)d
int tt=0
for(int i=0i<4i++)
{
f.c=m[i]//算子f遍历+-*/:
for(int j=0j<4j++)
{
g.c=m[j]//算子f遍历+-*/:
for(int k=0k<4k++)
{
h.c=m[k]//算子f遍历+-*/:
if ((int)h(g(f(a,b),c),d)==24) // ((a,b),c),d计算顺序,成功t加1
{ cout<<"(("<<a<<f.c<<b<<")"<<g.c<<c<<")"<<h.c<<d<<"=24"<<endl++t}
if ((int)g(f(a,b),h(c,d))==24) // ((a,b) (c,d))计算顺序,成功t加1
{ cout<<"("<<a<<f.c<<b<<")"<<g.c<<"("<<c<<h.c<<d<<")=24"<<endl++t}
if ((int)h(f(a,g(b,c)),d)==24) // ((a,(b,c)),d 计算顺序,成功t加1
{ cout<<"("<<a<<f.c<<"("<<b<<g.c<<c<<"))"<<h.c<<d<<"=24"<<endl++t}
if ((int)f(a,h(g(b,c),d))==24) // a,((b,c),d)计算顺序,成功t加1
{ cout<<a<<f.c<<"(("<<b<<g.c<<c<<")"<<h.c<<d<<")=24"<<endl++t}
}
}
} if(t)
return 1//t!=0即t>0 至少成功一次
else
return 0//t==0即一次也没有成功。
}
因为n没有初始化为0
所以不能计算出24的数字后,不显示“can not get 24!”
这题目我见过,不过粘贴时好像被“吃掉”了+号,照此程序的话会死循环的。中间部分应该是:void func1(int i)
{ printf("%c",st[i])
if(i<3)
{ i+=2 //此处有变化
func2(i)
}
}
void func2(int i)
{ printf("%c",st[i])
if(i<3)
{ i+=2 //此处有变化
func1(i)
}
}
程序的分析如下:
从main()开始执行,调用fun1(0)
先输出h,然后i变为2,再调用fun2(2)
在fun2中,输出l,然后i变为4,再调用fun1(4),输出o后,直接返回
全部的输出就是:
hlo
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)