题目
挑战:将数字1-13分别放入三个桶中,满足任何桶中任意两个数的差与这两个数不在同一个桶中。
(例如,如果将数字5和7放入一个桶中,那么不能将数字2放入同一个桶中)
下方是解决方案:(文字颜色为白色,选中下一行即可查看)
[[2, 3, 7, 11, 12], [5, 6, 8, 9], [1, 4, 10, 13]]
或 [[2, 3, 11, 12], [5, 6, 7, 8, 9], [1, 4, 10, 13]]
同学很早以前问的一个题,做了之后就忘了告诉人家。近几天突然想起来,就扒了出来。
用回溯法做的
结果中有很多重复的,所以每种组合只输出一次
/*挑战:将数字1-13分别放入三个桶中,满足任何桶中任意两个数的差与这两个数不在同一个桶中。(例如,如果将数字5和7放入一个桶中,那么不能将数字2放入同一个桶中)下方是解决方案:(文字颜色为白色,选中下一行即可查看)[[2, 3, 7, 11, 12], [5, 6, 8, 9], [1, 4, 10, 13]] 或 [[2, 3, 11, 12], [5, 6, 7, 8, 9], [1, 4, 10, 13]]*/#include#include using namespace std;int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};int a1[13],a2[13],a3[13];int n1,n2,n3,count;bool IsCorrect(const int *ax,const int c,const int num){ int i,j,sub; if(-1==c) return true; for(i=0;i<=c;i++) { sub=num-ax[i]; for(j=0;j<=c;j++) if(ax[j]==sub) return false; } return true;}void Fill(int n){ if(14==n&&1==a1[0]&&2==a2[0]) { /*++count; cout<<"Case "< <<":"<