2011-06-26 回答
你这个搞错了吧...不是24点吗??怎么出来了21点...估计21点不怎么好凑(虽然道理一样)
这个24点游戏不是很简单写的!!!你确认下是21点还是24点
追问:
确定是21点而不是24点,麻烦你帮帮忙哦
追答:
真正给你写确实有点难度...
我从网上给你找了一个24点的程序(至于改成21点,你只需把有24的地方改成21就好啦...)
程序不是我写的...帮你调试了下,是可以运行的!!!也许不完全符合你的要求,但愿能够帮助你...
#include
using namespace std;
int calcute(int a, int b, char sig);
int calExpress(int a, int b, int c, int d);
char sig[4] = {'+', '-', '*', '/'};
bool flag = true;
int num = 0;
void main()
{
int s[4] ;
cin >> s[0] >> s[1] >> s[2] >> s[3];
for(int i = 0; i < 4; i++)
for(int j =0; j < 4; j++)
for(int k =0; k < 4; k++)
for(int m = 0; m < 4; m++)
if(i!=j && i!=k && i!=m && j!= k && j!=m && k!=m)
if(calExpress(s[i],s[j],s[k],s[m]) == 1)
return;
if(num == 0)
{
cout << "no answer" << endl;
}
}
int calcute(int a, int b, char sig)
{
switch(sig)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
if(a%b!=0)
flag = false;
return a/b;
}
}
int calExpress(int a, int b, int c, int d)
{
int temp1, temp2,temp3;
for(int i = 0; i < 4; i++)
for(int j =0; j < 4; j++)
for(int k =0; k < 4; k++)
{
flag = true;
if(i <=1)
{
if(j <= 1)
{
temp1 = calcute(c,d,sig[k]);
temp2 = calcute(a,b,sig[i]);
temp3 = calcute(temp1,temp2,sig[j]);
if(temp3 == 24 && flag == true)
{
num++;
cout << a << sig[i] << b << sig[j] <
return 1;
}
}
else
{
temp1 = calcute(b, c, sig[j]);
temp2 = calcute(temp1, d, sig[k]);
temp3 = calcute(a, temp2, sig[i]);
if(temp3 == 24&& flag == true)
{
num++;
cout << a << sig[i] << b << sig[j] <
return 1;
}
}
}
else
{
temp1 = calcute(a, b, sig[i]);
if(j <= 1)
{
temp2 = calcute(c, d, sig[k]);
temp3 = calcute(temp1,temp2,sig[j]);
if(temp3 == 24&& flag == true)
{
num++;
cout << a << sig[i] << b << sig[j] <
return 1;
}
}
else
{
temp2 = calcute(temp1, c, sig[j]);
temp3 = calcute(temp2, d, sig[k]);
if(temp3 == 24&& flag == true)
{
num++;
cout << a << sig[i] << b << sig[j] <
return 1;
}
}
}
}
return 0;
}
补充:
我晕,,狂晕...根本没有看清你的题...这个完全和24点两回事...
我再帮你看看........十分不好意思..........
补充:
这个样子行不...累死我了
我的邮箱malc1988@qq.com
给我发邮件,我给你...
给我加分啊.....
追问:
发给我吧谢谢 我再给你加上100分,辛苦了
追问:
你收到我的邮件了没啊,我的邮箱是1453894140@qq.com,发给我谢谢
追答:
我已经给你发了,里面的注释也很全...
追问:
不好意思 那邮箱有点问题。。。没收到 请帮忙发到 87266709@qq.com 谢谢 不好意思哈~~
追答:
我晕...
追问:
真的不好意思我现在才知道我的邮箱有问题,不好意思,浪费你几分钟再发一下,真的很不好意思