- 注册时间
- 2010-10-22
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 2292
- 在线时间
- 小时
|
发表于 2013-5-11 22:04:11
|
显示全部楼层
虽然是可以筛选的,还是来两个比较慢的c实现,M=5的时候,基本上没法忍受等多久。 - #include <stdio.h>
- #include <math.h>
-
- int datacmp(int *data,int n)
- {
- int i,j;
- if( data[0] != abs(data[1]-data[2]) )
- return -1;
- for(i=1;i<n-1;i++)
- for(j=0;j<n-1;j++)
- if( data[2*i+j-1] != abs(data[2*i+j+1]-data[2*i+j+2]) )
- return -1;
-
- return 0;
- }
-
- void main()
- {
- int a,b,c,d,e,f;
- int i,j;
- int data[6]={0};
- for(a=1;a<=6;a++)
- {
- for(b=1;b<=6;b++)
- {
- if(a==b)
- continue;
- for(c=1;c<=6;c++)
- {
- if(a==c||b==c)
- continue;
- for(d=1;d<=6;d++)
- {
- if(a==d||b==d||c==d)
- continue;
- for(e=1;e<=6;e++)
- {
- if(a==e||b==e||c==e||d==e)
- continue;
- for(f=1;f<=6;f++)
- {
- if(a==f||b==f||c==f||d==f||e==f)
- continue;
- data[0]=a;data[1]=b;data[2]=c;data[3]=d;data[4]=e;data[5]=f;
- if(0 != datacmp(data,3))
- break;
- printf("%d %d %d %d %d %d \n",data[0],data[1],data[2],data[3],data[4],data[5]);
- }
- }
- }
- }
- }
- }
- }
复制代码- #include <stdio.h>
- #include <math.h>
-
- #define M 4 /* 差三角的层数 */
-
- #define N (((M)*(M+1))/2)
-
- int datacmp(int *data,int n)
- {
- int i,j;
- if( data[0] != abs(data[1]-data[2]) )
- return -1;
- for(i=1;i<n-1;i++)
- {
- for(j=0;j<n-1;j++)
- if( data[2*i+j-1] != abs(data[2*i+j+1]-data[2*i+j+2]) )
- return -1;
- }
- return 0;
- }
-
- void swap(int *data, int i, int offset)
- {
- int tmp;
- tmp = data[offset];
- data[offset] = data[i];
- data[i] = tmp;
- }
-
- void order(int *data,int offset)
- {
- int i,tmp;
- if(offset == N-1)
- {
- if(0 == datacmp(data,M))
- {
- for(i=0;i<N;i++)
- printf("%d ",data[i]);
- printf("\n");
- }
- return;
- }
- for(i = offset; i < N; i++)
- {
- swap(data,i, offset);
- order(data,offset + 1);
- swap(data,i, offset);
- }
- }
-
- void main()
- {
- int i,data[N];;
- for(i = 0; i<N; i++)
- data[i] = i+1;
- order(data,0);
- }
复制代码 |
|