Python 编程题 20
刑侦大队对涉及6个嫌疑人的一桩疑案进行分析,得到以下线索:1)A和B至少有一人作案;2)A、D不可能是同案犯;3)A、E、F三人中至少有2人参与作案;4)B、C或同时作案...
刑侦大队对涉及6个嫌疑人的一桩疑案进行分析,得到以下线索:
1)A和B至少有一人作案;
2)A、D不可能是同案犯;
3)A、E、F三人中至少有2人参与作案;
4)B、C或同时作案,或均与本案无关;
5)C、D有且仅有一人作案;
6)如果D没有参与作案,则E也不可能参与作案。
完成函数find(),其功能是找出嫌疑犯,返回值类型为列表,列表中存放罪犯,按升序排列(如['A', 'B', 'C'])。
def find():
#----------------------------------
# Coding here
#----------------------------------
print(find())
提示:设置布尔型变量A、B、C、D、E、F,采用枚举法,若A~F取值同时满足条件1~6(如条件1可表示为A or B),则取值为True表示该变量对应的嫌疑犯是罪犯。 展开
1)A和B至少有一人作案;
2)A、D不可能是同案犯;
3)A、E、F三人中至少有2人参与作案;
4)B、C或同时作案,或均与本案无关;
5)C、D有且仅有一人作案;
6)如果D没有参与作案,则E也不可能参与作案。
完成函数find(),其功能是找出嫌疑犯,返回值类型为列表,列表中存放罪犯,按升序排列(如['A', 'B', 'C'])。
def find():
#----------------------------------
# Coding here
#----------------------------------
print(find())
提示:设置布尔型变量A、B、C、D、E、F,采用枚举法,若A~F取值同时满足条件1~6(如条件1可表示为A or B),则取值为True表示该变量对应的嫌疑犯是罪犯。 展开
1个回答
展开全部
枚举内容就是每个人犯或不犯两种状态。用int[6]就足够。
递归形式(int[] 犯案状态,int 递归层号)
{
if(递归层号==6)
{if(认定判定(犯案状态)){找到结果;}
return;
}
for(int i=0;i<2;i++)
{
犯案状态[i]=i;
递归形式(犯案状态,递归层号+1);
}
}
然后是判定
bool 认定判定(int[] 状态)
{
if(状态[0]+状态[1]==0)return false;/*AB至少有一个*/
if(状态[0]+状态[3]==2)return false;//A、D不可能是同案犯;
if(状态[0]+状态[4]+状态[3]<2)return false;//A、E、F三人中至少有2人
if(状态[1]+状态[2]!=1)return false;//B、C或同时作案,或均与本案无关;
if(状态[3]==0&&状态[4]==1)return false;//如D没有参与作案,E也不
return true;
}
递归形式(int[] 犯案状态,int 递归层号)
{
if(递归层号==6)
{if(认定判定(犯案状态)){找到结果;}
return;
}
for(int i=0;i<2;i++)
{
犯案状态[i]=i;
递归形式(犯案状态,递归层号+1);
}
}
然后是判定
bool 认定判定(int[] 状态)
{
if(状态[0]+状态[1]==0)return false;/*AB至少有一个*/
if(状态[0]+状态[3]==2)return false;//A、D不可能是同案犯;
if(状态[0]+状态[4]+状态[3]<2)return false;//A、E、F三人中至少有2人
if(状态[1]+状态[2]!=1)return false;//B、C或同时作案,或均与本案无关;
if(状态[3]==0&&状态[4]==1)return false;//如D没有参与作案,E也不
return true;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询