六角幻方 C语言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了六角幻方 C语言相关的知识,希望对你有一定的参考价值。
方法可能有点笨,采取的是先外圈(1-12),再中间(13-18)的排序方法,这样能尽可能先剪枝剪掉三个求和的,再去掉四个求和的。
但是只用数组,检查重复似乎是一件很困难的事情,得到的十二个结果实际上是一个,2(镜像)*6(角度)
//原创代码,作者:lhy1024
#include<stdio.h> #include<time.h> #define SUM 38 int count=0; int check(int a[],int flag); int arrange(int a[],int ordinal); void magic_printf(int a[]); int main() { int a[20]= {0}; double start,finish; start=clock();//计时部分 arrange(a,1); finish=clock(); printf( "%f seconds\n",(finish-start)/ CLOCKS_PER_SEC); return 0; } int arrange(int a[],int ordinal) { int i,j; if(ordinal==20) { count++; magic_printf(a);//最后一位进行打印 } else { int b[20]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; for(i=1; i<=ordinal-1; i++) { b[a[i]]=0;//用过的数字将开关调为零 } for(i=1; i<=19; i++) { if(b[i]!=0) { a[ordinal]=i; if(check(a,ordinal)==1)//如果符合条件,递归下一步 arrange(a,ordinal+1); } } } } int check(int a[],int flag) { if(flag==3||flag==5||flag==7||flag==9||flag==11) { if(a[flag-2]+a[flag-1]+a[flag]!=SUM) return 0; } if(flag==14) { if(a[12]+a[13]+a[14]+a[4]!=SUM) return 0; } if(flag==15) { if(a[2]+a[14]+a[15]+a[6]!=SUM) return 0; } if(flag==16) { if(a[4]+a[15]+a[16]+a[8]!=SUM) return 0; } if(flag==17) { if(a[10]+a[17]+a[16]+a[6]!=SUM) return 0; } if(flag==18) { if(a[8]+a[17]+a[18]+a[12]!=SUM) return 0; if(a[2]+a[13]+a[18]+a[10]!=SUM) return 0; } if(flag==19) { if(a[1]+a[13]+a[19]+a[16]+a[7]!=SUM) return 0; if(a[3]+a[14]+a[19]+a[17]+a[9]!=SUM) return 0; if(a[11]+a[18]+a[19]+a[15]+a[5]!=SUM) return 0; } return 1; } void magic_printf(int a[]) { printf("Case: %d\n",count); printf(" %2d %2d %2d\n",a[1],a[2],a[3]); printf(" %2d %2d %2d %2d\n",a[12],a[13],a[14],a[4]); printf("%2d %2d %2d %2d %2d\n",a[11],a[18],a[19],a[15],a[5]); printf(" %2d %2d %2d %2d\n",a[10],a[17],a[16],a[6]); printf(" %2d %2d %2d\n",a[9],a[8],a[7]); printf("\n"); }
以上是关于六角幻方 C语言的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用hexSticker包将本地图片(image file)转换为六角图(六角贴六角形贴纸local image to hex sticker)
R语言使用hexSticker包将lattice包可视化的结果转换为六角图(六角贴六角形贴纸lattice plot to hex sticker)
R语言使用hexSticker包将R原生使用plot函数可视化的结果转换为六角图(六角贴六角形贴纸base plot to hex sticker)
R语言使用hexSticker包将ggplot2包可视化的结果转换为六角图(六角贴六角形贴纸ggplot2 plot to hex sticker)