帮帮忙吧,那位编程高手会做这道题啊?考试呀

2025-05-11 03:12:26
推荐回答(1个)
回答1:

这儿有两个,是C++的,看你是要C++的吗还是要C的:
#include "stdafx.h"
#include
#include
#include

using namespace std;

const double precision = 1e-6;
const int count_of_number = 4;
const int number_to_be_cal = 24;

double number[count_of_number];
string expression[count_of_number];

bool search(int n)
{
if (n == 1) {
if ( fabs(number[0] - number_to_be_cal) < precision ) {
cout << expression[0] <<"="< return false;
} else {
return false;
}
}

for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
double a, b;
string expa, expb;

a = number[i];
b = number[j];
number[j] = number[n - 1];

expa = expression[i];
expb = expression[j];
expression[j] = expression[n - 1];

expression[i] = ( + expa + + + expb + );
number[i] = a + b;
if ( search(n - 1) ) return true;

expression[i] = ( + expa + - + expb + );
number[i] = a - b;
if ( search(n - 1) ) return true;

expression[i] = ( + expb + - + expa + );
number[i] = b - a;
if ( search(n - 1) ) return true;

expression[i] = ( + expa + * + expb + );
number[i] = a * b;
if ( search(n - 1) ) return true;

if (b != 0) {
expression[i] = ( + expa + / + expb + );
number[i] = a / b;
if ( search(n - 1) ) return true;
}
if (a != 0) {
expression[i] = ( + expb + / + expa + );
number[i] = b / a;
if ( search(n - 1) ) return true;
}

number[i] = a;
number[j] = b;
expression[i] = expa;
expression[j] = expb;
}
}
return false;
}

int main(int argc, char* argv[])
{
for (int i = 0; i < count_of_number; i++) {
char buffer[20];
int x;
cin >> x;
number[i] = x;
itoa(x, buffer, 10);
expression[i] = buffer;
}

if ( search(count_of_number) ) {
cout << "success." << endl;
} else {
cout << "fail." << endl;
}
return 0;
}

--------------------------------------------

#include "iostream.h"
#include "stdlib.h"

void step1 (int x,int y,int * p)
{
p[0]=x+y;
p[1]=x-y;
p[2]=x*y;
if (y!=0&&(x%y==0))
p[3]=x/y;
else
p[3]=-1000; //make it couldnt reach 24
}

int conclude (int x,int y)
{
if ((x+y)==24)
return 0;
if ((x-y)==24)
return 1;
if ((x*y)==24)
return 2;
if (y==0 || (x%y!=0))
return -1;
if ((x/y)==24)
return 3;
return -1;
}

extern void exit (int);

void print (int x,int y,int s)
{
switch (s)
{

case 0:
cout< case 1:
cout< case 2:
cout< case 3:
cout< default:
cout<<"error!";
exit(0);
}
}

int main ()
{
int i,j,k,l,m,n,result;
int a[4],b[4],num[4];
bool circulate=true;

while(circulate)
{
cout<<"please enter four numbers:";
for (i=0;i<4;i++)
{
cin>>num[i];
if (num[i]<=0 || num[i]>13)
{
cout<<"\a error! enter again."< cin.ignore(100,\n);
break;
}
if (i==3)
circulate=false;
}
}

int signal_1=0,signal_2=0,signal_3=0,signal_4=0,signal_x=0;
int sign=0,temp1=0,temp2=0;

for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
{
if (j==i) continue;
step1(num[i],num[j],a);

for (l=0;l<4;l++)
{
if (l==i||l==j) continue;
n=6-i-j-l;
for (k=0;k<4;k++) //signal_1 signal_2
{
step1(a[k],num[l],b);
for (m=0;m<4;m++)
{
result=conclude (b[m],num[n]);
if (result!=-1)
{
if (signal_1 && (k==m && m==result && k==0) )
continue;
if (signal_2 && (k==m && m==result && k==2) )
continue;
//if (signal_3 && (m==result && k==0) )
// continue;
//if (signal_4 && (m==result && k==2) )
// continue;

else
{
if (k==m && m==result && k==0)
signal_1=1;
if (k==m && m==result && k==2)
signal_2=1;
// if (m==result && k==0)
// signal_3=1;
// if (m==result && k==2)
// signal_4=1;

print (num[i],num[j],k);
print ( a[k],num[l],m);
print ( b[m],num[n],result);
cout < }
}
}// end of the innerest "for" statement

}//end of the first condition
step1 (num[l],num[n],b);

for (k=0;k<4;k++)
{
for (m=0;m<4;m++)
{
result=conclude (a[k],b[m]);

if (result !=-1)
{
if (signal_1 && (k==m && m==result && k==0) )
continue;
if (signal_2 && (k==m && m==result && k==2) )
continue;
if (signal_x==1 && temp1==a[k] && b[m]==temp2 && sign==result)
continue;

if (signal_x!=1)
{
sign=result;
temp1=a[k];
temp2=b[m];
signal_x=1;
}

print (num[i],num[j],k);
print (num[l],num[n],m);
print ( a[k], b[m],result);
cout< }
}
}//end of the second condition.
}//end "for" starement of l
}//end "for" statement of j
}//end "for" statement of i
system("pause");
return 0;
}