免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jiliu66
打印 上一主题 下一主题

三个java超级变态逻辑循环编程题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-07-21 09:59 |只看该作者
很锻炼思维

论坛徽章:
0
22 [报告]
发表于 2011-07-21 11:50 |只看该作者
很有意思,拿回去看看

论坛徽章:
0
23 [报告]
发表于 2011-07-22 14:57 |只看该作者
逻辑问题

论坛徽章:
0
24 [报告]
发表于 2011-07-25 10:51 |只看该作者
有意思,研究研究

论坛徽章:
0
25 [报告]
发表于 2011-07-26 11:55 |只看该作者
这个太变态了,做出来的都是牛人啊

论坛徽章:
0
26 [报告]
发表于 2011-07-28 11:17 |只看该作者
蚂蚁问题

  1. public class Test {
  2.         //初始时任意相邻2只蚂蚁之间的距离都是偶数。
  3.         //每秒钟任意相邻2只蚂蚁之间的距离要么+2,要么-2,要么不变
  4.         //因此任意相邻2只蚂蚁在碰头的所经历的时间必定是整数秒。
  5.         //因此可以每秒钟查询一次6只蚂蚁的状态。
  6.         public static void main(String[] args) {
  7.                 //初始化 5只蚂蚁,-1表示向左,1表示向右,
  8.                 //直观感觉最小时间应该是-1,-1,-1,1,1。其他情况就不测试了。
  9.                 int[] orientations = {-1,-1,-1,+1,+1};
  10.                 Anti[] antis = new Anti[5];
  11.                 antis[0] = new Anti();
  12.                 antis[1] = new Anti();
  13.                 antis[2] = new Anti();
  14.                 antis[3] = new Anti();
  15.                 antis[4] = new Anti();
  16.                 antis[0].init(null, antis[1], 3, 24, orientations[0], true);
  17.                 antis[1].init(antis[0], antis[2], 7, 20, orientations[1], true);
  18.                 antis[2].init(antis[1], antis[3], 11, 16, orientations[2], true);
  19.                 antis[3].init(antis[2], antis[4], 17, 10, orientations[3], true);
  20.                 antis[4].init(antis[3], null, 23, 4, orientations[4], true);
  21.                
  22.                 int i = 0;
  23.                 for (;;i++) {//每秒轮询
  24.                         boolean isDone = true;;
  25.                         for (Anti anti : antis) {
  26.                                 if (anti.isOnLine) {
  27.                                         isDone = false;
  28.                                         anti.left+=anti.orientation;
  29.                                         anti.right-=anti.orientation;
  30.                                         if (anti.left == 0 || anti.right ==0){
  31.                                                 anti.isOnLine = false;
  32.                                         }
  33.                                 }
  34.                         }
  35.                         if (isDone) {
  36.                                 break;
  37.                         }
  38.                         for (Anti anti : antis) {
  39.                                 if (anti.isOnLine) {
  40.                                         if (anti.leftAnti == null ) {
  41.                                                 if (anti.rightAnti.isOnLine
  42.                                                         && anti.rightAnti.left == anti.left) {
  43.                                                         anti.orientation  = anti.orientation *-1;
  44.                                                 }
  45.                                         } else {
  46.                                                 if (anti.leftAnti.isOnLine
  47.                                                                 && anti.leftAnti.left == anti.left) {
  48.                                                         anti.orientation  = anti.orientation *-1;
  49.                                                 }
  50.                                         }
  51.                                 }
  52.                         }
  53.                 }
  54.                 System.out.printf("当初始方向为%d,%d,%d,%d,%d时,一共%d秒",
  55.                                 orientations[0],orientations[1],orientations[2],orientations[3],orientations[4],i);
  56.         }
  57. }

  58. class Anti {
  59.         Anti leftAnti;
  60.         Anti rightAnti;
  61.         int orientation ;//-1:left, +1:right
  62.         float left;
  63.         float right;
  64.         boolean isOnLine;
  65.        
  66.         public Anti(){
  67.         }
  68.         public void init(Anti leftAnti, Anti rightAnti, float left, float right,
  69.                         int orientation, boolean isOnLine) {
  70.                 this.leftAnti = leftAnti;
  71.                 this.rightAnti = rightAnti;
  72.                 this.left = left;
  73.                 this.right = right;
  74.                 this.orientation = orientation;
  75.                 this.isOnLine = isOnLine;
  76.         }
  77. }
复制代码
遍历可能的初始方向数组可以测试其他情况,然后就可以算出最大最小时间

论坛徽章:
0
27 [报告]
发表于 2011-07-28 11:20 |只看该作者
回复 16# shaohuifan


    这个算法测出来的最小时间是13秒,但是直观感觉最小时间应该是11秒。

论坛徽章:
0
28 [报告]
发表于 2011-07-28 11:48 |只看该作者
会议问题

  1. public class AA {
  2.         public static void main(String[] args) {
  3.                 //代表ABCDEF 6人,-1表示不去,1表示会去
  4.                      //直观感觉是1,1,1,-1,-1,1。其他情况可以更改plan进行验证
  5.                 int[] plan = {1,1,1,-1,-1,1};
  6.                 if (checkPlan(plan))
  7.                         System.out.println("plan is OK");
  8.                 else
  9.                         System.out.println("plan is not OK");
  10.         }
  11.        
  12.         public static boolean checkPlan(int[] plan){
  13.                 if (plan[0]+plan[1] == -2)//AB
  14.                         return false;
  15.                 if (plan[0]+plan[4]+plan[5] != 1) //AEF
  16.                         return false;
  17.                 if (plan[1]+plan[2] == 0) //BC
  18.                         return false;
  19.                 if (plan[0]+plan[3] != 0) //AD
  20.                         return false;
  21.                 if (plan[2]+plan[3] != 0) //CD
  22.                         return false;
  23.                 if (plan[3]==-1 &&plan[4] ==1)//DE
  24.                         return false;
  25.                 return true;
  26.         }
  27. }
复制代码
遍历所有可能的plan,即可以得到可行的出席计划

论坛徽章:
0
29 [报告]
发表于 2011-07-28 15:49 |只看该作者
很锻炼。。。

论坛徽章:
0
30 [报告]
发表于 2011-08-01 11:07 |只看该作者
研究了一下,看是看懂了,自己写就有点难了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP