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;
	}
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C语言编写二十四点游戏(也称为24游戏或四则运算游戏)是一个经典的编程练习,它主要利用数组和基本数学运算来解决。以下是简单的C语言程序框架,用于实现基本的二十四点算法: ```c #include <stdio.h> #include <stdlib.h> // 定义一个函数,用于计算给定数字数组能否得到24 int is_24(int *nums, int count) { for (int i = 0; i < count; i++) { for (int j = i + 1; j < count; j++) { // 生成所有可能的两数组合 for (int k = j + 1; k < count; k++) { int a = nums[i], b = nums[j], c = nums[k]; // 用剩余的一个数尝试所有运算 for (int op = 0; op < 4; op++) { switch (op) { case 0: // 加法 if (a + b + c == 24 || a + b - c == 24 || a + c - b == 24) return 1; break; case 1: // 减法 if (a + b - c == 24 || a - b + c == 24 || a - c + b == 24) return 1; break; case 2: // 乘法 if (a * b / c == 24 || a * b * c == 24 || a / b * c == 24) return 1; break; case 3: // 除法 if (a * b / c == 24 || a * c / b == 24 || a / b / c == 24) return 1; break; } } } } } return 0; // 如果找不到解决方案,返回0 } int main() { int nums[] = {5, 3, 9, 8}; // 示例输入数组 int count = sizeof(nums) / sizeof(nums); if (is_24(nums, count)) { printf("Solution found: %d + %d * (%d - %d)\n", nums, nums, nums, nums); } else { printf("No solution found.\n"); } return 0; } ``` 这个程序会检查给定的一组数字是否可以通过加、减、乘、除运算得到24。注意,这只是一个基本版本,实际应用中可能需要更复杂的逻辑处理用户输入、错误检查等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值