谁在哪一排(C语言实现)

全班同学排成 6 排。A、B、C、D、E、F 等 6 人分别站在第 1 排到第 6 排。已知 A 不在第一排,A 与 B 前后相邻,C 在 D 前面,E 在 B 的前两排,C 在 F后的第 4 排。问A、B、C、D、E、F各在第几排。同样我们先将条件的自然语言描述转变为条件的逻辑语言描述如下:

C 在 D 前面 c < d

A不在第一排 a != 1

E 在 B 的前两排 e = b - 2

A 与 B 前后相邻 ( a = b - 1 ) ||  (a = b + 1)

C 在 F后的第 4 排 c = f + 4

均满足( 1 <= a,b,c,d,e,f <=6 ) ,且( a != b  && a != c && a !=  d &&  a != e && a != f  )&& ( b != c && b != d && b != e && b != f)  && ( c != d && c != e && c !=f) && (d != e && d != f ) && ( e != f ) 则用C语言实现如下:

#include "stdio.h"

#include "stdlib.h"

#define Max 6 // 指出最大的排号

#define Min 1 // 指出最小的排号

int main(int argc,char *argv[])

{

    // a b c d e f 分别代表着 A B C D E F

    int a = 0 , b = 0, c = 0, d = 0, e = 0 ,f = 0;

    // 穷举 a b c d e f 的可能性,每一个都有 6 种可能,则进行 6 的 6 次放穷举

    for( a = Min ; a <= Max ; a ++)

    {

        for( b = Min ; b <= Max ; b ++)

        {

            for(c = Min ; c <= Max ; c ++)

            {

               for(d = Min ; d <= Max ; d ++)

               {

                   for(e = Min ; e <= Max ; e ++)

                   {

                       for(f = Min ; f <= Max ; f++)

                       {

                           if( a != 1 ) // A不在第一排

                           {

                              if( c < d ) // C 在 D 前面

                              {

                                 if( e == ( b - 2 ) ) // E 在 B 的前两排

                                 {

                                    if( ( a == ( b - 1 ) ) || ( a == (b + 1) ) ) // A 与 B 前后相邻

                                    {

                                       if( c == ( f + 4 ) ) // C 在 F后的第 4 排

                                       {

                                           if( a != b  && a != c && a !=  d &&  a != e && a != f )

                                           {

                                              if( b != c && b != d && b != e && b != f )

                                              { 

                                                if( c != d && c != e && c !=f )

                                                {

                                                   if( d != e && d != f && e != f )

                                                   {

                                                      printf("最后的获奖情况如下:\n");

                                                      printf("a = %d\nb = %d\n",a,b);

                                                      printf("c = %d\nd = %d\n",c,d);

                                                      printf("e = %d\nf = %d\n",e,f);

                                                   }

                                                }

                                              }

                                           }

                                       }

                                    }

                                 }

                              }

                           }

                       }

                   }

               }

            }

        }

    }

    system("pause");

    return 0 ;

    }




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值