當前位置:編程學習大全網 - 編程語言 - c語言編程題 求解答怎麽做

c語言編程題 求解答怎麽做

#include?<stdio.h>

/*

1.A和B中至少壹人獲獎;

2.A,C,D中至少兩人獲獎;

3.A,E中至多壹人獲獎;

4.B和F或者同時獲獎,或者都未獲獎;

5.C和E的獲獎情況也相同;

6.如果E未獲獎,則F也不可能獲獎;

7.C,D,E,F中至多三人獲獎。

用flag數組表示獲獎狀態,1表示獲獎,0表示沒獲獎,下標與對應的人的關系如下

0?1?2?3?4?5

A?B?C?D?E?F

*/

int?flag[6];

bool?check(){

int?cnt;

//1?A?B都未獲獎,返回0

if(!flag[0]?&&?!flag[1])return?0;

//2?ACD中獲獎數小於2,返回0

cnt?=?0;

if(flag[0])cnt++;

if(flag[2])cnt++;

if(flag[3])cnt++;

if(cnt?<?2)return?0;

//3?AE都獲獎,返回0

cnt?=?0;

if(flag[0]?&&?flag[4])return?0;

//4?B和F的獲獎情況不壹樣,返回0

if(!flag[1]?&&?flag[5])return?0;

if(flag[1]?&&?!flag[5])return?0;

//5?C和E的獲獎情況不壹樣,返回0

if(!flag[2]?&&?flag[4])return?0;

if(flag[2]?&&?!flag[4])return?0;

//6?E未獲獎,F獲獎?返回0

if(!flag[4]?&&?flag[5])return?0;

//7?CDEF中獲獎人數大於3,返回0

cnt?=?0;

for(int?i?=?2;?i?<=?5;?++i)if(flag[i])cnt?++;

if(cnt?>?3)return?0;

//其余情況符合條件,返回1

return?1;

}

int?main(){

//枚舉所有可能的獲獎情況,***有2^6種

bool?mark?=?0;

int?i,j;

for(i?=?0;?i?<?64;?++i){

int?t?=?i;

for(j?=?0;?j?<?6;?++j){

flag[j]?=?t%2;

t?/=?2;

}

if(check()){

printf("找到可行解:\n");

mark?=?1;

for(j?=?0;?j?<?6;?++j){

if(flag[j])printf("%c獲獎\n",'A'+j);

}

puts("");

}

}

if(!mark)puts("未找到可行解!");

return?0;

}

  • 上一篇:為什麽那麽多騙人的副業,而且還那麽多人上當?
  • 下一篇:核桃編程史上最好的編程
  • copyright 2024編程學習大全網