中学生编程真心求指教。

honghui88770 2012-09-06 02:51:04
一个自己写的速算24点,但交上去老师说 C++学的面向对象要体现出来。 我实在想不出24点速算怎么体现面向对象啊。我用的是穷举法- -/ 智商有限。


代码如下:
#include <iostream>
using namespace std;
int flag=0;
float jisuan (float x,float y,float z,float w);
int main()
{
int a,b,c,d;
fanhui:
cout<<"请输入四个数字(1-10)"<<endl;
cout<<" 数字一:";
cin>>a;
cout<<" 数字二:";
cin>>b;
cout<<" 数字三:";
cin>>c;
cout<<" 数字四:";
cin>>d;
if ((a<0)||(a>10)||(b<0)||(b>10)||(c<0)||(c>10)||(d<0)||(d>10))
{
cout<<"您输入的数字不符合要求,请重新输入"<<endl;
goto fanhui;
}

for(int k=0,e;k<=1;k++)
{
jisuan(a,b,c,d);
for(int i=0;i<=1;i++)
{
if(c!=d)
{
e=c;c=d;d=e;
jisuan(a,b,c,d);
}
if(b!=c)
{
e=b;b=c;c=e;
jisuan(a,b,c,d);
}
}
if(c!=d)
e=c;c=d;d=e;
jisuan(a,b,c,d);
if(b!=c)
{
e=b;b=c;c=e;
}
else
k++;
}




if(!flag) cout<<"此题无解"<<endl;
return 0;
}

float jisuan (float x,float y,float z,float w)
{
if(x+y+z+w==24)
{
cout<<x<<"+"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}

else if(x+y+z-w==24)
{
cout<<x<<"+"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y+z+w==24)
{
cout<<x<<"*"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;

flag=1;
}
else if(x*y+z-w==24)
{
cout<<x<<"*"<<y<<"+"<<z<<"-"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y-z-w==24)
{
cout<<x<<"*"<<y<<"-"<<z<<"-"<<w<<"=24"<<endl;

flag=1;
}
else if(x/y+z+w==24)
{
cout<<x<<"/"<<y<<"+"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}


else if((x+y)*z+w==24)
{
cout<<"("<<x<<"+"<<y<<")*"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}

else if((x+y)*z-w==24)
{
cout<<"("<<x<<"+"<<y<<")*"<<z<<"-"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y)*z+w==24)
{
cout<<"("<<x<<"-"<<y<<")*"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y)*z-w==24)
{
cout<<"("<<x<<"-"<<y<<")*"<<z<<"-"<<w<<"=24"<<endl;
flag=1;
}

else if((x+y)/z+w==24)
{
cout<<"("<<x<<"+"<<y<<")/"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}


else if((x+y+z)*w==24)
{
cout<<"("<<x<<"+"<<y<<"+"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x+y-z)*w==24)
{
cout<<"("<<x<<"+"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y-z)*w==24)
{
cout<<"("<<x<<"-"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x+y+z)/w==24)
{
cout<<"("<<x<<"+"<<y<<"+"<<z<<")/"<<w<<"=24"<<endl;
flag=1;
}


else if((x+y)*(z+w)==24)
{
cout<<"("<<x<<"+"<<y<<")*("<<z<<"+"<<w<<")=24"<<endl;
flag=1;
}

else if((x+y)*(z-w)==24)
{
cout<<"("<<x<<"+"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;
flag=1;
}

else if((x-y)*(z-w)==24)
{
cout<<"("<<x<<"-"<<y<<")*("<<z<<"-"<<w<<")=24"<<endl;
flag=1;
}


else if(x*y*z+w==24)
{
cout<<x<<"*"<<y<<"*"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y*z-w==24)
{
cout<<x<<"*"<<y<<"*"<<z<<"-"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y/z+w==24)
{
cout<<x<<"*"<<y<<"/"<<z<<"+"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y/z-w==24)
{
cout<<x<<"*"<<y<<"/"<<z<<"-"<<w<<"=24"<<endl;
flag=1;
}


else if(x*y+z*w==24)
{
cout<<x<<"*"<<y<<"+"<<z<<"*"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y-z*w==24)
{
cout<<x<<"*"<<y<<"-"<<z<<"*"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y+z/w==24)
{
cout<<x<<"*"<<y<<"+"<<z<<"/"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y-z/w==24)
{
cout<<x<<"*"<<y<<"-"<<z<<"/"<<w<<"=24"<<endl;
flag=1;
}


else if((x+y)*z*w==24)
{
cout<<"("<<x<<"+"<<y<<")*"<<z<<"*"<<w<<"=24"<<endl;
flag=1;
}

else if((x+y)*z/w==24)
{
cout<<"("<<x<<"+"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y)*z*w==24)
{
cout<<"("<<x<<"-"<<y<<")*"<<z<<"*"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y)*z/w==24)
{
cout<<"("<<x<<"-"<<y<<")*"<<z<<"/"<<w<<"=24"<<endl;
flag=1;
}

else if((x*y)/(z+w)==24)
{
cout<<"("<<x<<"*"<<y<<")/("<<z<<"+"<<w<<")=24"<<endl;
flag=1;
}

else if((z-w)!=0&&(x*y)/(z-w)==24)
{
cout<<"("<<x<<"*"<<y<<")/("<<z<<"-"<<w<<")=24"<<endl;
flag=1;
}


else if((x+y*z)/w==24)
{
cout<<"("<<x<<"+"<<y<<"*"<<z<<")/"<<w<<"=24"<<endl;
flag=1;
}

else if((x*y-z)/w==24)
{
cout<<"("<<x<<"*"<<y<<"-"<<z<<")/"<<w<<"=24"<<endl;

flag=1;
}
else if((x+y/z)*w==24)
{
cout<<"("<<x<<"+"<<y<<"/"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x+y*z)*w==24)
{
cout<<"("<<x<<"+"<<y<<"*"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y*z)*w==24)
{
cout<<"("<<x<<"-"<<y<<"*"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x-y/z)*w==24)
{
cout<<"("<<x<<"-"<<y<<"/"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x*y-z)*w==24)
{
cout<<"("<<x<<"*"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((x/y-z)*w==24)
{
cout<<"("<<x<<"/"<<y<<"-"<<z<<")*"<<w<<"=24"<<endl;
flag=1;
}

else if((y-z/w)!=0&&x/(y-z/w)==24)
{
cout<<x<<"/"<<"("<<y<<"-"<<z<<"/"<<w<<")"<<endl;
flag=1;
}

else if((y/z-w)!=0&&x/(y/z-w)==24)
{
cout<<x<<"/"<<"("<<y<<"/"<<z<<"-"<<w<<")"<<endl;
flag=1;
}


else if(x*y*z*w==24)
{
cout<<x<<"*"<<y<<"*"<<z<<"*"<<w<<"=24"<<endl;

flag=1;
}
else if(x*y*z/w==24)
{
cout<<x<<"*"<<y<<"/"<<z<<"/"<<w<<"=24"<<endl;
flag=1;
}

else if(x*y/z/w==24)
{
cout<<x<<"*"<<y<<"/"<<z<<"/"<<w<<"=24"<<endl;
flag=1;
}
return 0;
}

...全文
198 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
thz1598746 2012-09-06
  • 打赏
  • 举报
回复
目测楼主不是穷举。。。。有情况没考虑。。何谓穷举?
meiguakee 2012-09-06
  • 打赏
  • 举报
回复
这个么。弄个类,该扔进去的都扔进去,核心的数据做成成员变量,不重要的就作参数传吧,然后类提供一些简单的函数供main调用,其他操作全部弄成私有函数。基本上类就是这么搞了,问题本身还是不看了吧,好长。
kingkingking 2012-09-06
  • 打赏
  • 举报
回复
你把x y z就可以弄成一个类的成员变量
再就是你哪些函数可以也归纳在一个类里面额
honghui88770 2012-09-06
  • 打赏
  • 举报
回复
还有一个问题。我试了一下程序 输入6 7 8 9就有解。输入7 8 9 6就无解。我检查了一下代码。但没发现哪里有问题。哪位大哥帮我看下- -
zhaoZero41 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

老师要求体现出面向对象。 区别于C。 那么我能想到的只有把计算函数和数据封装成一个类了。然后调用。但是我觉得这完全是画蛇添足啊。 起不到任何左右。反而使我的代码更冗杂
[/Quote]

Class deck
{
private:
int card[4];
public:
do something
};

也就是这样了
honghui88770 2012-09-06
  • 打赏
  • 举报
回复
老师要求体现出面向对象。 区别于C。 那么我能想到的只有把计算函数和数据封装成一个类了。然后调用。但是我觉得这完全是画蛇添足啊。 起不到任何左右。反而使我的代码更冗杂
zhaoZero41 2012-09-06
  • 打赏
  • 举报
回复
中学生就开始写24点了。。。这是个很复杂的算法问题,去网上搜搜相关帖子吧,一般用递归的比较多,至于面向对象什么的。。
MuteCoder 2012-09-06
  • 打赏
  • 举报
回复
中学生就学编程了?叫人情何以堪

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧