???.BMP 2017-08-31 02:13 采纳率: 0%
浏览 2898

警察,小偷,一家子过河的问题

游戏规则:一家6口(爸爸、妈妈、两个女儿、两个儿子)及警察和小偷要从河这边渡到河对岸。在河这边仅有一艘小舢板可以把他们载到对岸。可是,只有爸爸、妈妈和警察能够驾船,不论成人与小孩,每程只能承载二人。在渡河过程中,你要避免以下三种情况的发生:
(1) 当警察与小偷分开时,小偷会伤害一家6口;
(2) 当爸爸看见妈妈离开时,爸爸便会教训女儿;
(3) 当妈妈看见爸爸离开时,妈妈便会教训儿子。

有一段C代码,我看不懂,有人能给加一下注释吗?
代码见附件

#include<stdio.h>
#include<stdlib.h>
 int c1(int x,int y)
 {
     return (x&y)==x;
 }
 int c2(int x)
 {
     if(x<128&&x>64)return 0;
     if(c1(32,x)&&!c1(4,x)&&(c1(2,x)||c1(1,x)))
         return 0;
     if(!c1(32,x)&&c1(4,x)&&(c1(16,x)||c1(8,x)))
         return 0;
     return 1;
 }
 static int a[]={128+64,128+32,128+16,128+8,128+4,128+2,129,128,32+16,32+8,32+4,32,4+2,4+1,4};  
void f(int x,int * pa,int n)                                
{


if(n>20) return;            
if(x==0)
{
    int i;
    for(i=0;i<n;i++)
        printf("%d\n",pa[i]);
    exit(0);
}
int i;
for(i=0;i<15;i++)
{ 
  if(n&&a[i]==pa[n-1]) continue;

  if(n%2==0)
  {
     if(!c1(a[i],x)) continue;
     if(!c2(x-a[i]))  continue; 
     if(!c2(255-x+a[i]))  continue;
     pa[n]=a[i];      
     f(x-a[i],pa,n+1);
 }
 else
 {
     if(!c1(a[i],255-x)) continue;
     if(!c2(255-x-a[i]))  continue; 
     if(!c2(x+a[i]))  continue; 
     pa[n]=a[i];     
     f(x+a[i],pa,n+1);
 }
}

}
//jc 128  
//xt  64
//bb  32
//de  16
//ee  8
//mm  4
//dg  2
//2g  1 
int main()
{
    int pa[1111];               

    f(255,pa,0);                
}

  • 写回答

1条回答 默认 最新

  • IAmObject 2017-08-31 02:30
    关注

    。。。。。。。。。。。。。。。。。。。。。。。。。。

    评论

报告相同问题?

问题事件

  • 请选择合适的标签 8月27日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况