0 1 4 11 29;0 2 8 17 22
0 1 4 11 29;0 2 21 26 35
0 1 13 31 38;0 2 8 17 22
0 1 13 31 38;0 2 21 26 35
0 1 15 19 25;0 2 5 13 34
0 1 15 19 25;0 2 9 30 38
0 1 15 19 25;0 3 11 32 39
0 1 17 23 27;0 2 5 13 34
0 1 17 23 27;0 2 9 30 38
0 1 17 23 27;0 3 11 32 39
0 2 8 17 22;0 3 10 28 40
0 2 21 26 35;0 3 10 28 40
我们可以以
0 1 4 11 29;0 2 8 17 22
为例子
上面对应两个模式,每个模式中每个数都可以加上0~40中任意一个数并且模41可以形成共82种模式。
这82个模式中,0~40每个数都正好在10个模式中出现。
于是我们把82个模式看成82个人,0~40看成41次会议,那么82个人可以召开41次会议,每次会议正好10个人,而没有两个人参加相同的会议 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXV 41
#define TSIZE 91390
#define INVALID 0xFFFFFFFFFFFFFFFFLL
unsigned data;
signed long long result;
int dc;
signed long long alldiff(unsigned int x)
{
signed long long r=0ll;
int i,j;
for(i=0;i<5;i++)for(j=i+1;j<5;j++){
long long l1 = 1ll<<(x-x);
if(r&l1)return INVALID;
r|=l1;
l1 = 1ll<<(MAXV-(x-x));
if(r&l1)return INVALID;
r|=l1;
}
return r;
}
void init()
{
unsigned int i;
i=0;
for(i=i+1;i<MAXV;i++){
for(i=2*i+1;i<MAXV;i++){
for(i=i+i+1;i<MAXV;i++){
for(i=i+i+1;i<MAXV;i++){
signed long long r = alldiff(i);
data=((i<<24)|(i<<16)|(i<<8)|(i<<0));
result=r;
dc++;
}
}
}
}
}
void output(unsigned x, unsigned y)
{
printf("0 %d %d %d %d;", x>>24, (x>>16)&255, (x>>8)&255, x&255);
printf("0 %d %d %d %d\n",y>>24, (y>>16)&255, (y>>8)&255, y&255);
}
int main()
{
int i,j;
init();
printf("dc=%d\n",dc);
for(i=0;i<dc;i++){
if(result==INVALID)continue;
for(j=i+1;j<dc;j++){
if((result&result) == 0ll){
output(data,data);
}
}
}
}
本帖最后由 王守恩 于 2018-4-26 12:17 编辑
mathe 发表于 2018-4-26 11:38
计算机搜索有很多结果
0 1 4 11 29;0 2 8 17 22
0 1 4 11 29;0 2 21 26 35
我还是厚着脸皮问:A(82,18,10)=41应该有的,但 ,有A(8, ? ,3)=8吗?
补充内容 (2018-4-27 08:46):
谢谢mathe!谢谢宝贵的资料! A(82,18,10)=41是有的,A(8, ? ,3)=8也是有的。节点没有问题,前面有个路灯,心里踏实多了。 谢谢math老师,构造很巧妙。
页:
1
[2]