- 注册时间
- 2009-7-21
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 4489
- 在线时间
- 小时
|
楼主 |
发表于 2010-6-19 13:54:43
|
显示全部楼层
把newkid的plsql翻译成c,毫秒级算出3408组abcd+efgh=hijk-
- /*WITH n AS (
- SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM<=12
- )
- ,t (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,lvl,roundup) AS (
- SELECT n,0,0,0,0,0,0,0,0,0,0,0,1,0
- FROM n
- WHERE n BETWEEN 1 AND 7
- UNION ALL
- SELECT t.n1
- ,DECODE(t.lvl,1 ,n.n,t.n2 )
- ,DECODE(t.lvl,2 ,n.n,t.n3 )
- ,DECODE(t.lvl,3 ,n.n,t.n4 )
- ,DECODE(t.lvl,4 ,n.n,t.n5 )
- ,DECODE(t.lvl,5 ,n.n,t.n6 )
- ,DECODE(t.lvl,6 ,n.n,t.n7 )
- ,DECODE(t.lvl,7 ,n.n,t.n8 )
- ,DECODE(t.lvl,8 ,n.n,t.n9 )
- ,DECODE(t.lvl,9 ,n.n,t.n10)
- ,DECODE(t.lvl,10,n.n,t.n11)
- ,DECODE(t.lvl,11,n.n,t.n12)
- ,t.lvl+1
- ,CASE t.lvl
- WHEN 5 THEN FLOOR((t.n4 +t.n5 )/16)
- WHEN 8 THEN FLOOR((t.n7 +t.n8 +t.roundup)/16)
- WHEN 11 THEN FLOOR((t.n10+t.n11+t.roundup)/16)
- ELSE t.roundup
- END
- FROM t,n
- WHERE n.n NOT IN (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11)
- AND (t.lvl IN (3,6,9)
- OR (t.lvl=11 AND n.n = MOD(t.n10+t.n11+t.roundup,16) AND t.n3=t.n1+t.n2+FLOOR((t.n10+t.n11)/16))
- OR (t.lvl=10 AND n.n>t.n10)
- OR (t.lvl=8 AND n.n = MOD(t.n7+t.n8+t.roundup,16))
- OR (t.lvl=7 AND n.n>t.n7)
- OR (t.lvl=5 AND n.n = MOD(t.n4+ t.n5,16))
- OR (t.lvl=4 AND n.n>t.n4)
- OR (t.lvl=2 AND n.n - t.n1- t.n2 IN (0,1))
- OR (t.lvl=1 AND n.n>t.n1 AND n.n+t.n1<=15)
- )
- )
- SELECT COUNT(*)*8
- SELECT TO_CHAR(n1,'X') ||TO_CHAR(n10,'X')||TO_CHAR(n7,'X')||TO_CHAR(n4,'X')
- ||' + '
- ||TO_CHAR(n2,'X')||TO_CHAR(n11,'X')||TO_CHAR(n8,'X')||TO_CHAR(n5,'X')
- ||' = '
- ||TO_CHAR(n3,'X')||TO_CHAR(n12,'X')||TO_CHAR(n9,'X')||TO_CHAR(n6,'X') ------ 位数对调的其他组合略
-
- FROM t
- WHERE lvl=12
- ;
- 41 SELECT COUNT(*),lvl from t group by lvl order by 2;
-
- COUNT(*) LVL
- --------- ----------
- 7 1
- 46 2
- 55 3
- 495 4
- 1980 5
- 953 6
- 5718 7
- 14295 8
- 3901 9
- 11703 10
- 11703 11
- 426 12
-
- 已选择12行。
- */
- #include <stdio.h>
- #include <time.h>
- int main()
- {
- int i=0;
- int j=0;
- int k=0;
- int l=0;
- char a[65500][15];
- int b[15];
- int c=0;
- for(i=1;i<=7;i++)//level 1 第一个数第一位最大7
- {
- a[i][1]=i;
- a[i][2]=a[i][3]=a[i][4]=a[i][5]=a[i][6]=a[i][7]=a[i][8]=a[i][9]=a[i][10]=a[i][11]=a[i][12]=0;
- a[i][13]=1;
- a[i][14]=0;
- }
- b[0]=1;
- b[1]=8;
- i=b[1]-1;
- for(j=2;j<=12;j++)//level 2-12
- {
- printf("j=%d,%d-%d,count=%d\n",j,b[j-2],b[j-1]-1,b[j-1]-b[j-2]);
- for(k=1;k<=12;k++)//digit 1-12
- {
- for(l=b[j-2];l<b[j-1];l++) //l -> last level
- {
- if(
- (k!=a[l][1]&&k!=a[l][2]&&k!=a[l][3]&&k!=a[l][4]&&k!=a[l][5]&&k!=a[l][6]&&k!=a[l][7]&&k!=a[l][8]&&k!=a[l][9]&&k!=a[l][10]&&k!=a[l][11])
- &&((a[l][13]==3||a[l][13]==6||a[l][13]==9)
- ||(a[l][13]==11&&k==(a[l][10]+a[l][11]+a[l][14])%16&&a[l][3]==a[l][1]+a[l][2]+(a[l][10]+a[l][11])/16)
- ||(a[l][13]==10&&k>a[l][10])
- ||(a[l][13]==8&&k==(a[l][7]+a[l][8]+a[l][14])%16)
- ||(a[l][13]==7&&k>a[l][7])
- ||(a[l][13]==5&&k==(a[l][4]+a[l][5])%16)
- ||(a[l][13]==4&&k>a[l][4])
- ||(a[l][13]==2&&(k==a[l][1]+a[l][2]||k==a[l][1]+a[l][2]+1))
- ||(a[l][13]==1&&k>a[l][1]&&k+a[l][1]<=12)//15)
- )
- )
- {
- i++;
- a[i][1]=a[l][1];
- a[i][2]=(a[l][13]==1)?k:a[l][2];
- a[i][3]=(a[l][13]==2)?k:a[l][3];
- a[i][4]=(a[l][13]==3)?k:a[l][4];
- a[i][5]=(a[l][13]==4)?k:a[l][5];
- a[i][6]=(a[l][13]==5)?k:a[l][6];
- a[i][7]=(a[l][13]==6)?k:a[l][7];
- a[i][8]=(a[l][13]==7)?k:a[l][8];
- a[i][9]=(a[l][13]==8)?k:a[l][9];
- a[i][10]=(a[l][13]==9)?k:a[l][10];
- a[i][11]=(a[l][13]==10)?k:a[l][11];
- a[i][12]=(a[l][13]==11)?k:a[l][12];
- a[i][13]=a[l][13]+1;
- a[i][14]=
- (a[l][13]==5)?(a[l][4]+a[l][5])/16:(
- (a[l][13]==8?(a[l][7]+a[l][8]+a[l][14])/16:(
- (a[l][13]==11)?(a[l][10]+a[l][11]+a[l][14])/16:a[l][14])));
- if(a[i][13]==12)
- {
- c++;
- }
- } //if
- } //l
-
- } //k
- b[j]=i+1;
- //printf("%x%x%x%x+%x%x%x%x=%x%x%x%x\n",/*1 10 7 4 2 11 8 5 3 12 9 6*/a[i][1],a[i][10],a[i][7],a[i][4],a[i][2],a[i][11],a[i][8],a[i][5],a[i][3],a[i][12],a[i][9],a[i][6]);
- } //j
- printf("c=%d\n",c*8);
- return 1;
- }
复制代码 |
|