首页 > 代码库 > 概率法求解三阶幻方[C语言]
概率法求解三阶幻方[C语言]
#include <stdio.h>#include <string.h>int in[9]={1,2,3,4,5,6,7,8,9};int s[9];int re[3][3];int sum(int su[]){ int i,re=0; for(i=0;su[i];i++) re+=su[i]; return re;}int main(){ int i,j,k,count=0; memset(s,0,sizeof(s)); int SUM = sum(in); if(SUM/9 != (float)SUM/9.0) { printf("wrong\n"); return 0; } for(i=0;i<9;i++) for(j=i+1;j<9;j++) for(k=j+1;k<9;k++) { if(in[i]+in[j]+in[k] == (int)SUM/3) { s[i]++; s[j]++; s[k]++; count++; } } if(count!=8) { printf("wrong\n"); return 0; } int flag=0; for(i=8;i>=0;i--) { if(s[i]==4) re[1][1] = in[i]; if(s[i]==3 && flag==0) { re[0][0] = in[i]; flag++; } else if(s[i]==3 && flag==1) { re[0][2] = in[i]; flag++; } else if(s[i]==3 && flag==2) { re[2][0] = in[i]; flag++; } else if(s[i]==3 && flag==3) { re[2][2] = in[i]; flag++; } } if(re[0][0]+re[1][1]+re[2][2]!=(int)SUM/3) { int tmp; tmp = re[0][0]; re[0][0] = re[2][2]; re[2][2] = tmp; } re[0][1] = (int)SUM/3 - re[0][0] - re[0][2]; re[1][0] = (int)SUM/3 - re[0][0] - re[2][0]; re[1][2] = (int)SUM/3 - re[2][2] - re[0][2]; re[2][1] = (int)SUM/3 - re[2][2] - re[2][0]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("%d ",re[i][j]); } printf("\n"); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。