题目链接:http://codeforces.com/problemset/problem/710/C
题目大意:输入一个奇数n,则生成n*n矩阵,要求矩阵的行、列还有斜着,所有元素之和为奇数。
解题思路:要符合行、列还有斜着,所有元素之和为奇数,则保证行、列或者斜着,有奇数个奇数 和 偶数个偶数即可。
3
2 1 4
3 5 7
6 9 8
5
2 4 1 6 8
10 3 5 7 12
9 11 13 15 17
14 19 21 23 16
18 20 25 22 24
7
2 4 6 1 8 10 12
14 16 3 5 7 18 20
22 9 11 13 15 17 24
19 21 23 25 27 29 31
26 33 35 37 39 41 28
30 32 43 45 47 34 36
38 40 42 49 44 46 48
关键点:
if( i>=(j-n/2) && i<=(j+n/2) && i+j>=((n+3)/2) && i+j<=(n+(n+1)/2) )
AC 代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int x[50][50]; 4 int main() 5 { 6 int n,i,j; 7 while(~scanf("%d",&n)) 8 { 9 int js=1,os=2; 10 for(i=1; i<=n; i++) 11 { 12 for(j=1; j<=n; j++) 13 { 14 if( i>=(j-n/2) && i<=(j+n/2) && i+j>=((n+3)/2) && i+j<=(n+(n+1)/2) ) 15 { 16 cout<<js<<" "; 17 js+=2; 18 } 19 else 20 { 21 cout<<os<<" "; 22 os+=2; 23 } 24 } 25 cout<<endl; 26 } 27 28 } 29 return 0; 30 }