注意:这个循环语句内的判断部分
两个条件结果的和为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);
}