一道关于和尚取水的算法题

colincheng 2009-04-07 04:34:42
能不能教我这道题怎么解:某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:
和尚1: 星期二,四;
和尚2: 星期一,六;
和尚3: 星期三,日;
和尚4: 星期五;
和尚5: 星期一,四,六;
和尚6: 星期二,五;
和尚7: 星期三,六,日;
请将所有合理的挑水时间安排表,请将结果以TXT文本文件输出。
...全文
325 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
king017 2009-04-08
  • 打赏
  • 举报
回复
a[][]={{2,4},{1,6},{3,7},{5},{1,4,6},{2,5},{3,6,7}}
按数组长度先排序,取最小的长度的一个数,然后把其他有这个数的去除,并且把这个数组去除
剩下为b[][]={{2,4},{1,6},{3,7},{1,4,6},{2},{3,6,7}}
如此类推吧....
colincheng 2009-04-08
  • 打赏
  • 举报
回复
果然可以,多谢楼上大哥帮助,谢谢了,
abc130314 2009-04-08
  • 打赏
  • 举报
回复
相当于排列组合,只要排出的结果没有重复,就是答案了。
4135627(和尚1,星期四;和尚2,星期一;和尚3,星期三;……)
4175623
4635127
4675123

public static void main(String[] args) {
int[][] arr = {{2, 4}, {1, 6}, {3, 7}, {5}, {1, 4, 6}, {2, 5}, {3, 6, 7}};
g(arr);
}

public static void g(int[][] arr) {
g(arr, 0, 0);
}

private static void g(int[][] arr, int c, int s) {
if (c >= arr.length) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i][0]);
}
System.out.println();
return;
}
int[] a = arr[c];
for (int i = 0; i < a.length; i++) {
int temp = a[i];
int x = 1 << temp >> 1;
if ((s & x) == 0) {
a[i] = a[0];
a[0] = temp;
g(arr, c + 1, s + x);
a[0] = a[i];
a[i] = temp;
}
}
}
colincheng 2009-04-08
  • 打赏
  • 举报
回复
这道题确实比较难,我昨天想了一晚上都没有搞定
win720520 2009-04-08
  • 打赏
  • 举报
回复
UP
fanyuanwaifdl 2009-04-08
  • 打赏
  • 举报
回复
貌似是排课程表
fanyuanwaifdl 2009-04-08
  • 打赏
  • 举报
回复
up
ty_tarena_pger 2009-04-08
  • 打赏
  • 举报
回复
唉,思想都知道,但要写出代码恐怕会有很多烦恼繁琐的问题需要解决,这道题我是越写越复杂啊
scueczhang 2009-04-07
  • 打赏
  • 举报
回复
将和尚和自己有时间的星期放在一个二维数组里面
a[][]={{2,4},{1,6},{3,7},{5},{1,4,6},{2,5},{3,6,7}}
再检查a[i]的长度,如果长度为1的话,那么对应的就应该是自己所对应的星期,并且同时将数组里面有该星期的全部删掉,再来看a[i]的长度
如此反复,估计可以的出最后的结果
colincheng 2009-04-07
  • 打赏
  • 举报
回复
我是要写出程序,不是手算。
Gerry-Zhang 2009-04-07
  • 打赏
  • 举报
回复
顺序: 和尚5 ,和尚6, 和尚7, 和尚1 , 和尚4, 和尚2, 和尚3

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧