【C语言】练习:猜名次(根据条件推断)

该代码示例使用C语言编写了一个循环,通过set_rank函数生成五个不同的1到5之间的随机数。这个函数会不断重试直到生成的数满足一系列逻辑与(&&)连接的条件,每个条件中两个变量之和为1,确保只有一个条件为真。主循环会一直执行直到找到符合条件的随机数组合。
摘要由CSDN通过智能技术生成

注意:这个循环语句内的判断部分

两个条件结果的和为1,即为两个条件其中一个为真

(但是"||"达不到此效果,因为"||"操作符为"至少满足一个",左边为真时直接跳过后一个判断条件。)

	while (1)
	{
		set_rank(&a, &b, &c, &d, &e);
		if (((b == 2) + (a == 3) == 1) &&
			((b == 2) + (e == 4) == 1) &&
			((c == 1) + (d == 2) == 1) &&
			((c == 5) + (d == 3) == 1) &&
			((e == 4) + (a == 1) == 1))
		{
			break;
		}
	}

自写完整代码:

set_rank()函数生成1-5互不相同的数,调用时循环生成,直至满足判断条件,即为所求结果。

#include <stdlib.h>
#include <time.h>
void set_rank(int* pa, int* pb, int* pc, int* pd, int* pe)
{
	while (1)
	{
		*pa = (rand() % 5) + 1;
		*pb = (rand() % 5) + 1;
		*pc = (rand() % 5) + 1;
		*pd = (rand() % 5) + 1;
		*pe = (rand() % 5) + 1;
		if (*pa != *pb && *pa != *pc && *pa != *pd && *pa != *pe
			&& *pb != *pc && *pb != *pd && *pb != *pe
			&& *pc != *pd && *pc != *pe
			&& *pd != *pe)
		{
			break;
		}
	}
	return;
}
int main()
{
	int a = 0, b = 0, c = 0, d = 0, e = 0;
	srand((unsigned int)time(NULL));
	while (1)
	{
		set_rank(&a, &b, &c, &d, &e);
		if (((b == 2) + (a == 3) == 1) &&
			((b == 2) + (e == 4) == 1) &&
			((c == 1) + (d == 2) == 1) &&
			((c == 5) + (d == 3) == 1) &&
			((e == 4) + (a == 1) == 1))
		{
			break;
		}
	}
	printf("a:%d \nb:%d \nc:%d \nd:%d \ne:%d \n"
		, a, b, c, d, e);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值