直接上代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int f(int a, int b, int c);
int g(int a, int b);
int h(int a, int b, int c);
int ANSWER(int a[]);
int test(int a[], char b[]);
int main()
{
printf("Hi!\n"
"Welcome to 24 game!\n\n"
"Choose one:\n"
"A.PLAY!\n"
"B.TEST YOUR OWN QUEUE!\n"
"\nYOUR CHOICE:");
char c;
scanf("%c", &c);
int i;
int a[4];
if(c=='A'||c=='a')
{
printf("\nRegulations:\n"
"1.your input shuold like this:\n"
"a+b*c/d\n"
"2.replace\"10\"by\"0\"\n"
"3.You can get answer by input\"answer\"\n"
"4.IF the question has no answer,\n"
" Then input\"no\"\n");
printf("\nOK,now\n"
"Let\'s start game!\n");
printf("\n");
printf("Question:\n");
printf(" ");
char b[10];
srand(time(NULL));
for(i=0; i<4; i++)
{
a[i]=rand()%10+1;
printf("%d ", a[i]);
}
int sign = 0;
do
{
printf("\n");
printf("Give your answer: ");
scanf("%7s", b);
if(strcmp(b,"answer")==0)
{
ANSWER(a);
}
else if(strcmp(b,"no")==0)
{
if(!ANSWER(a))
{
printf("Yes, no answer");
}
}
else
{
sign = test(a,b);
}
if(!sign)
{
printf("Try again!\n");
}
}
while(!sign);
}
if(c=='B'||c=='b')
{
for(i=0; i<4; i++)
{
scanf("%d", &a[i]);
}
ANSWER(a);
if(!ANSWER(a))
{
printf("No correct solution\n");
}
}
return 0;
}
int f(int a, int b, int c)
{
int s;
switch(c)
{
case 0:
s = a+b;
break;
case 1:
s = a-b;
break;
case 2:
s = a*b;
break;
case 3:
s = g(a,b);
break;
}
return s;
}
int g(int a,int b)
{
if(a%b==0)
{
return a/b;
}
else
{
return 9999;
}
}
int ANSWER(int a[])
{
char b[5]="+-*/";
int i, j, k, l, r, s, t, x, y, z;
int sign=0;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
if(j!=i)
for(k=0; k<4; k++)
{
if(k!=i&&k!=j)
for(l=0; l<4; l++)
{
if(l!=i&&l!=j&&l!=k)
for(r=0; r<4; r++)
{
for(s=0; s<4; s++)
{
for(t=0; t<4; t++)
{
x = f(a[i], a[j], r);
y = f(x, a[k], s);
z = f(y, a[l], t);
if(z==24)
{
printf("%d%c%d%c%d%c%d=24\n", a[i], b[r], a[j], b[s], a[k], b[t], a[l]);
sign = 1;
}
}
}
}
}
}
}
}
if(sign==0)
return sign;
}
int h(int a, int b, int c)
{
int s;
switch(b)
{
case '+':
s = a+c;
break;
case '-':
s = a-c;
break;
case '*':
s = a*c;
break;
case '/':
s = a/c;
break;
}
return s;
}
int test(int a[],char b[])
{
int i, x, y, z;
for(i=0; i<7; i++)
{
if(b[i]>='0'&&b[i]<='9')
{
b[i] -= '0';
}
if(b[i]==0)
{
b[i]=10;
}
}
x = h(b[0],b[1], b[2]);
y = h(x, b[3], b[4]);
z = h(y, b[5], b[6]);
if(z==24)
{
int x1=a[0]*a[1]*a[2]*a[3];
int y1=a[0]+a[1]+a[2]+a[3];
int x2=b[0]*b[2]*b[4]*b[6];
int y2=b[0]+b[2]+b[4]+b[6];
if(x1==x2&&y1==y2)
{
printf("RIGHT!!!");
return 1;
}else
{
printf("FOOl INPUT\n");
return 0;
}
}
else
{
printf("WRONG!!!\n");
return 0;
}
}