求此C++源程序的详细解读!题目是输入4个数用四则运算计算出24!急!

求此C++源程序的详细解读!题目是输入4个数用四则运算计算出24!急!,第1张

题目:输入任意四个整数(0到10),运算符只有加减乘除,还有括号.每个数只能且必须用一次。要求判断这些表达的结果中是否有24。如果有,输出计算表达式:如输入4,6,1,1 输出 4*6*1*1 =24 (允许有括号)。

源程序:

现在加注释如下:其中 不显示“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


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

原文地址: http://outofmemory.cn/yw/11206037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存