首页 > 代码库 > 解题报告1005 幻方
解题报告1005 幻方
做幻方
Time Limit:1000MS Memory Limit:1024K
Description:
Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N,他就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐^_^ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等。
Input:
每行有一个数N(0< N < 30),输入0结束。Output:
输入一个奇数,输出一个幻方,每个数占3格,顺序参照样板输出,输出完以后加一个回车。Sample Input:
510
Sample Output:
11 18 25 2 9 10 12 19 21 3 4 6 13 20 22 23 5 7 14 16 17 24 1 8 15 1
Hint:
如果不会做幻方的请从1开始数到最后,相信你会发现其中的规律。当然输出也要按照这样的格式。刚开始写是从中心开始挑着写,其实用计算机的思维想一想,按顺序来看就好了。
然后今天比较晕,行和列分不清楚,因为这个原因写了很久。
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 int main() 5 { 6 int n; 7 while(cin>>n) 8 { 9 if(n==0)10 break;11 int **a=new int*[n];12 for(int i=0;i<n;i++)13 a[i]=new int[n];14 for(int i=0;i<n;i++)15 for(int j=0;j<n;j++)16 a[i][j]=0;17 18 int c=1;19 int j=(n-1)/2;20 for(int i=n-1;i>=0;i++)21 {22 if(c!=1&&(c-1)%n==0)23 {24 if(j==0)25 j=n-1;26 else j=j-1;27 if(i==0)28 i=n-2;29 else if(i==1)30 i=n-1;31 else i=i-2;32 }33 a[i][j]=c++;34 j++;35 if(c==n*n+1) break;36 if(i==n-1)37 i=-1;38 if(j==n)39 j=0;40 } 41 for(int i=0;i<n;i++)42 {43 for(int j=0;j<n;j++)44 cout<<setw(3)<<a[i][j];45 cout<<endl;46 }47 cout<<endl;48 }49 return 0;50 }
解题报告1005 幻方
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。