C语言做二十四点游戏

直接上代码

#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;
	}
}
发布了28 篇原创文章 · 获赞 38 · 访问量 7181

猜你喜欢

转载自blog.csdn.net/weixin_45543556/article/details/104169047