幻方....
2015-11-11 20:49
459 查看
c语言上机。。。。
c写的幻方。
View Code
c写的幻方。
/************************************************************************* > File Name: code/class/7.c > Author: 111qqz > Email: rkz2013@126.com > Created Time: 2015年11月11日 星期三 19时31分50秒 ************************************************************************/ #include<stdio.h> #include <string.h> int n; int a[105][105]; void swap(int *a,int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int fix_x( int x,int k,int n) { if (k%2==1) { if (x==0) return n; else return x; } else { if (x==n) return n+n; else return x; } } int fix_y ( int y,int k,int n) { if (k<3) { if (y==n+1) return 1; else return y; } else { if (y==2*n+1) return n+1; else return y; } // if (y==n+1) // return 1; // else return y; } void print() { for ( int i = 1 ; i <= n ; i++) { for ( int j = 1 ; j <= n ; j++) printf("%d ",a[i][j]); printf("\n"); } } void OddMagic(int n,int x,int y,int k) //k表示4中状态。。。。 { int cur ; if (k==1) cur = 1; if (k==4) cur = n*n+1; if (k==3) cur = n*n*2+1; if (k==2) cur = n*n*3+1; int cnt = 1; while (cnt<=n*n) { a[x][y]=cur; int prex = x; int prey = y; cur++; cnt++; x--; y++; x = fix_x(x,k,n); y = fix_y(y,k,n); if (a[x][y]) { x = prex+1; y = prey; } } } int main() { memset(a,sizeof(a),0); scanf("%d",&n); if (n%2==1) { int x = 1; int y = n/2+1; OddMagic(n,x,y,1); } else { if (n%4==0) { for ( int i = 1,num=1 ; i <= n ; i++) for ( int j = 1 ; j <= n ; j++,num++) a[i][j]=num; for ( int i = 1 ; i <= n ; i++) { for ( int j = 1 ; j <= n ; j++) { if (i==j||i+j>=n+1) continue; int tmp; tmp = a[i][j]; a[i][j] = a[n+1-i][n+1-j]; a[n+1-i][n+1-j] = tmp; } } } else { int x = 1; int y = n/4+1; int hn = n/2; OddMagic(hn,x,y,1); OddMagic(hn,x+hn,y,2); OddMagic(hn,x,y+hn,3); OddMagic(hn,x+hn,y+hn,4); int m = n/4; for ( int i = 1 ; i <= hn ;i++) { for ( int j = 1 ; j <= m ; j++) { int tmp; if (i==m+1&&j==m) { tmp = a[m+1][m+1]; a[m+1][m+1] = a[m+1+hn][m+1]; a[m+1+hn][m+1] = tmp; continue; } tmp = a[i][j]; a[i][j] = a[i+hn][j]; a[i+hn][j] = tmp; // swap(a[i][j],a[i+n][j]); } } for ( int i = 1 ; i <= hn ; i++) { for ( int j = n ; j>=n-m+2 ; j--) { int tmp; tmp = a[i][j]; a[i][j] = a[i+hn][j]; a[i+hn][j] = tmp; } } } } print(); }
View Code
相关文章推荐
- 使用redis-cli定时执行指定命令
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest
- T004 找最大数
- lintcode :Integer to Roman 整数转罗马数字
- android开发步步为营之82:android多语言国际化
- RTMP直播应用与延时分析
- java中用一个MyNumber类充当“生产者—消费者”模式的缓冲池实例
- Qt通过odbc读取excel数据
- 堆内存和栈内存详解(转载)
- bzoj1003.物流运输(最短路 && DP)
- #在蓝懿学习iOS的日子#day16
- U3D中碰撞体和刚体的关系
- Linux多线程实践(9) --简单线程池的设计与实现
- nyoj 心急的C小加 236 (贪心&&LIS)
- 黑马程序员——C语言基础07—指针
- session的缓存(一级缓存)
- Could not publish server configuration for Tomcat v6.0 Server at localhost.
- DTCMS栏目首页,循环输出子栏目和新闻
- 【Java】List的subList方法
- 均值,方差,协方差三者的关系以及协方差矩阵