委派任務

某偵察隊接到一項緊急任務,要求在ABCDEF六個隊員中儘可能多地挑若干人,但有以下限制條件:

(1)       AB兩人中至少去一人;

(2)       AD不能一起去;

(3)       AEF三人中要派兩人去;

(4)       BC都去或都不去;

(5)       CD兩人中去一個;

(6)       D不去,則E也不去。

問應當讓哪幾個人去?

*問題分析與算法設計

       ABCDEF六個變量表示六個人是否去執行任務的狀態,變量的值爲1,則表示該人去;變量的值爲0,則表示該人不參加執行任務。根據題意可寫出表達式:

              a+b>1            AB兩人中至少去一人;

              a+d!=2           AD不能一起去;

              a+e+f==2              AEF三人中要派兩人去;

              b+c==0b+c==2        BC都去或都不去;

              c+d==1          CD兩人中去一個;

              d+e==0d==1            D不去,則E也不去(都不去;或DE隨便)。

       上述各表達式之間的關係爲“與”的關係。窮舉每個人去或不去的各中可能情況,代入上述表達式中進行推理運算,使上述表達式均爲“真”的情況就是正確的結果。

*程序與程序註釋:

Code:
  1. #include <stdio.h>   
  2. int main()   
  3. {   
  4.     int a,b,c,d,e,f;   
  5.     for(a=0;a<=1;a++)           /*窮舉每個人是否去的情況*/  
  6.         for(b=0;b<=1;b++)           /*1:去 0:不去*/  
  7.             for(c=0;c<=1;c++)   
  8.                 for(d=0;d<=1;d++)   
  9.                     for(e=0;e<=1;e++)   
  10.                     for(f=0;f<=1;f++)   
  11.                             if (a+b>1&&a+d!=2&&a+e+f==2&&(b+c==0||b+c==2)&&c+d==1&&(d+e==0||d==1))  /*判斷條件*/  
  12.                             {   
  13.                                 printf("A will%s be assigned./n",a?"":" not");   
  14.                                 printf("B will%s be assigned./n",b?"":" not");   
  15.                                 printf("C will%s be assigned./n",c?"":" not");   
  16.                                 printf("D will%s be assigned./n",d?"":" not");   
  17.                                 printf("E will%s be assigned./n",e?"":" not");   
  18.                                 printf("F will%s be assigned./n",f?"":" not");   
  19.                             }   
  20.     return 0;   
  21. }   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章