很久没写代码了,这(那)几天真是累死了。。。先写一个幻方的程序吧

 

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <windows.h>
  4 
  5 #define EVEN_DOUBLE_4 4    //双偶的最基本类型,4阶双偶
  6 #define SCREEN_SIZE 19    //屏幕显示不变形的最大尺寸(主要是因为窗口大小限制)
  7 #define MIN_SIZE 3    //最小阶数为3
  8 #define MAX_SIZE 30 
  9 /*原则上是任意阶,算法是相同的,这里就以30为上限吧,
 10 当然如果你愿意,可以修改的更大一些*/
 11 
 12 #define PRINT printf("Esc退出,Enter继续"); //打印的宏
 13 #define CLEAR row = 0; column = 0;     //清零
 14 
 15 int Magic[MAX_SIZE][MAX_SIZE]={0};    //全局,幻方数组
 16 int row = 0; column = 0;    //全局,幻方的行列数
 17 
 18 
 19 int main(void)
 20 {
 21     int read();    //读取函数
 22     void odd(int size, int ini_value );    //奇数阶幻方生成
 23     void mean_double_4(int size);    //4阶双偶生成
 24     void mean_double(int size);    //双偶生成
 25     void mean_single(int size);    //单偶生成
 26     void print_magic(int size);    //打印幻方
 27     void sum_print(int data[], int size);    //行、列、对之和打印
 28     void clear_sum(int data[]);
 29     void check_magic(int  data[], int size );    //检查所得矩阵是否为幻方阵
 30     
 31     int size;    //幻方阶数
 32     int sum[2*MAX_SIZE+2] = {0};//行、列、对之和
 33 
 34     do{
 35         CLEAR
 36         clear_sum(sum);
 37         size=read();
 38         system("cls");
 39 
 40         if(size%2 != 0 )    odd(size, 0);
 41         else if(size %4 == 0) mean_double(size);
 42         else mean_single(size);
 43 
 44         print_magic(size);
 45         sum_print(sum, size);
 46         check_magic(sum,size);
 47         PRINT
 48 
 49     }while (getch() != 27);
 50 
 51     return 0;
 52 }
 53 
 54 /*读入数据*/
 55 int read()
 56 {
 57     int min_size = MIN_SIZE;
 58     int max_size = MAX_SIZE;
 59     int size;
 60 
 61     do{
 62         printf("请输入幻方阶数n,n∈[%d,%d]\n", min_size, max_size);
 63         scanf("%d", &size);
 64         getchar();
 65         if(size<3 || size > MAX_SIZE) printf("非法输入,请重新输入[%d,%d]的正整数\n", min_size, max_size);
 66         else if(size > SCREEN_SIZE){
 67             printf("大于屏显最大阶数,输出将变形\n");
 68             Sleep(2000);
 69         }
 70     }while(size < MIN_SIZE || size > MAX_SIZE);
 71     
 72     return size;
 73 }
 74 
 75 
 76 /*奇数阶幻方,采用house法*/
 77 void odd(int size, int ini_value)
 78 {
 79     int num; //填充数字
 80     int min_num = 1+ini_value;
 81     int max_num = 1+size*size+ini_value;    //填充范围
 82     int x = size/2;
 83     int y = 0;    //初始填充坐标
 84 
 85     for(num = min_num; num < max_num; num++){
 86         Magic[y+row][x+column] = num;
 87         if(num % size == 0) y++; //跳步
 88         else x++, y += 2;    //马步,其实Horse法和Siamese是完全类似的
 89         x = x % size ;
 90         y = y % size ;
 91         /*越界反弹,即触碰到边界,从另一边返回*/
 92     }
 93 }
 94 
 95 /*双偶数阶幻方,采用对调法*/
 96 
 97 /*对调法的基础,4阶双偶。注意要求是将非主副对角线上的元素对调,
 98 其实换个角度,你也可以说就是把祝福对角线中心对调。只不过两种思路得到的矩阵
 99 正好是反着来的*/
100 /*本函数实现主副对角线互调*/
101 void mean_double_4(int size)
102 {    
103 
104     int i;
105     int total = size * size +1 ;
106     for(i = 0; i < EVEN_DOUBLE_4; i++){
107             Magic[row+i][column+i]    = total - Magic[row+i][column+i];
108             Magic[row+i][ EVEN_DOUBLE_4+column-i-1] =
109                 total - Magic[row+i][ EVEN_DOUBLE_4+column-i-1];
110         }
111 
112 }
113 
114 /*任意阶双偶*/
115 void mean_double(int size)
116 {
117     int num; //填充数字
118     int min_num = 1;
119     int max_num = 1+size*size;    //填充范围
120     int i = 0;    //循环变量
121     int temp;
122 
123     /*双偶,初始化*/
124     for(num = min_num; num < max_num; num++){
125         Magic[row][column] = num;
126         if((num ) % (size ) == 0){
127             column = 0, row++;
128         }
129         else column++;
130     }
131 
132     
133     /*分割为4×4的小矩阵*/
134     row = 0; column = 0;
135     temp = size / EVEN_DOUBLE_4;
136 
137     for(i = 1; i <=temp *temp; i++){
138         mean_double_4(size);
139         if(i % temp == 0) column = 0, row += 4 ;
140         else column = (i % temp) * EVEN_DOUBLE_4;
141     }
142 }
143 
144 
145 /*单偶,用楼梯法*/
146 void mean_single(int size)
147 {
148     int i,j,k,m;
149     int temp;
150 
151 
152     /*分象限处理,
153         14
154         32
155     与普通直角坐标系象限区别,说白了,就是个分块的概念
156     */
157     row = 0, column = 0;    //第一象限
158         odd(size/2, 0);
159 
160     row = size/2, column = size/2;    //第二象限
161         odd(size/2, (size*size)/4*1);
162 
163     row = 0, column = size/2;    //第三象限    
164         odd(size/2, (size*size)/4*2);
165 
166     
167     row = size/2, column = 0;    //第四象限
168         odd(size/2, (size*size)/4*3);
169     
170     m = size / 4;
171 
172     /*对换*/
173     for(i = 0; i< size/2; i++){
174         /*1、3象限对换*/
175         for(j = 0; j<m; j++ ){
176             if(i == m) k = j + m;
177             else k = j;
178             temp = Magic[i][k];
179             Magic[i][k] = Magic[i + 2*size/4 ][k];
180             Magic[i + 2*size/4 ][k] = temp;
181         }
182         /*2,4对换*/
183         for(j = 0; j<m-1; j++ ){
184             k = 3*size/4 +j;
185             temp = Magic[i][k];
186             Magic[i][k] = Magic[i + 2*size/4][k];
187             Magic[i + 2*size/4][k] = temp;
188         }
189     }            
190 }
191 
192 /*打印幻方*/
193 void print_magic(int size)
194 {
195     int i,j;
196     for(i = 0; i < size; i++)
197     for(j = 0; j < size; j++){
198         printf("%4d", Magic[i][j]);
199         if(j == size -1) putchar('\n');
200     }
201     putchar('\n');
202 }
203 
204 /*打印各行、各列、各对角线数据之和*/
205 void sum_print(int data[], int size)
206 {
207     int i,j;
208 
209     /*打印每行数据之和*/
210     printf("行之和:");
211     for(i = 0; i < size; i++)
212         for(j = 0; j < size; j++){
213             data[i] += Magic[i][j];    //行之和
214             if (j == size -1) printf("%6d", data[i]);
215     }
216     putchar('\n');
217 
218     
219     /*打印每列数据之和*/
220     printf("列之和:");
221     for(i = 0; i < size; i++)
222         for(j = 0; j < size; j++){
223             data[size+i] += Magic[j][i];    //列之和
224             if (j == size -1) printf("%6d", data[size+i]);
225     }
226     putchar('\n');
227     
228 
229     /*打印主对角线之和*/
230     for(i=0; i<size; i++)
231         data[2*size] += Magic[i][i];
232     printf("主对角线之和:%6d", data[2*size]);
233     putchar('\n');
234     
235     /*打印副对角线之和*/
236     for(i=0; i<size; i++)
237         data[2*size+1] += Magic[i][size-i-1];
238     printf("主对角线之和:%6d", data[2*size]);
239     putchar('\n');
240     
241 }
242 
243 /*行列对和数组清零*/
244 void clear_sum(int data[])
245 {
246     int i;
247     for(i = 0; i < 2 * MAX_SIZE; i++)
248         data[i] = 0;
249 }
250 
251 /*检查程序是否运转正常,所得结果是否是幻方*/
252 void check_magic(int  data[], int size )
253 {
254     int i;
255     int flag = 0;
256     for(i=1; i<size+2;i++)
257         if(data[0]-data[i]) flag = 1;
258     if(flag) printf("程序出错,Esc退出,Enter继续\n");
259     else printf("\n恭喜你,获得了一个新的%d阶幻方!\n", size);
260     putchar('\n');
261     
262 }

 

转载于:https://www.cnblogs.com/doodle777/p/3160016.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台系统可扩展性学习笔记(八)Service Mesh

文章目录网络传输可靠性将微服务控制下沉到网络栈&#xff1f;Sidecar从 Sidecar 到 Service MeshService Mesh 部署平台参考网络传输可靠性 从计网的学习过程中我们可以知道数据在网络传输中可能会出现一些异常状况&#xff1a; 数据丢失&#xff1a;数据包可能会到达一个缓…

关于Spring batch的学习之CSV2DB

最近在学习Spring batch相关的内容&#xff0c;网上也有不少Spring Batch相关的知识&#xff0c;不过大多都是使用xml进行配置的。这里是我用注解的方式进行相关的学习心得。 首先我们来看如何将一个文本文件中的内容导入到数据库中。 我们先来看一下我们所需要的环境。我们这里…

后台系统可扩展性学习笔记(九)Database Replication

文章目录数据库扩展一致性问题Replication &#xff08;复制&#xff09;异步复制同步复制半同步复制拓扑结构单主结构多主结构无主结构复制具体措施参考数据库扩展 之前在第一章后台系统可扩展性学习笔记&#xff08;一&#xff09;概要谈到&#xff1a;理论上&#xff0c;有…

python中的sum函数.sum(axis=1)

看起来挺简单的样子&#xff0c;但是在给sum函数中加入参数。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有点不解了 在我实验以后发现 我们平时用的sum应该是默认的axis0 就是普通的相加 而当加入axis1以后就是将一个矩阵的每一行向量相加 例如&…

后台系统可扩展性学习笔记(十)Database Partitioning

为了提升数据库的处理能力&#xff0c;我们把单库扩展成多库&#xff0c;并通过更新同步机制&#xff08;即Replication&#xff09;来保证多份数据的一致性。然而&#xff0c;在 各种复制方案下&#xff0c;每个数据库都持有一份完整数据&#xff0c;基于全量数据提供增删改查…

基于FPGA的HDTV视频图像灰度直方图统计算法设计

随着HDTV的普及&#xff0c;以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期。与传统CRT电视不同的是&#xff0c;这些高清数字电视需要较复杂的视频处理电路来驱动&#xff0c;比如&#xff1a;模数转换&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

Java Swing 影楼管理系统之登录功能

开头打广告&#xff0c;Java1234.com。 首先&#xff0c;来个效果图。 关键代码 1&#xff0c;界面层 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?

【电脑软件管理中Bdsyn手机助手的问题】Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安装的&#xff08;应该是自己自己主动安装的&#xff09;&#xff0c;卸载以后过几天又会出如今软件列表里。百度搜索却无法搜索出…

后台系统可扩展性学习笔记(十二)NoSQL

文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义 不同于关系型数据库&#xff0c;NoSQL 数据库&#xff08;也叫非 SQL 或非关系型数据库&#xff09;提供的数据存储、检索机制并不是基于表关系建模的。没有…

后台系统可扩展性学习笔记(十三)缓存

文章目录在哪儿加缓存缓存什么内容缓存原始查库结果缓存数据对象怎么查询缓存结果预留缓存模式直读模式直写模式回写式缓存绕写式缓存提前刷新模式缓存满了如何处理参考读写分离、分库分表、反范式化、采用 NoSQL……如果这些扩展手段全都上了&#xff0c;数据响应依旧越来越慢…

后台系统可扩展性学习笔记(十四)异步机制与MQ

对于 Web 服务而言&#xff0c;提升可扩展性的主要途径是将耗时的同步工作改成异步处理&#xff0c;从而允许将这些工作“外包”给多个 Worker 去做&#xff0c;或者提前完成能够预知的部分。 异步机制与可扩展性之间的关系需要从&#xff08;异步&#xff09;并行处理的优势说…

光标闪烁问题的解决办法

在调用Windows API函数SetCursor设置光标时&#xff0c;可能会碰到闪烁的问题&#xff1a;移动鼠标&#xff0c;光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁。 在MSDN上有关SetCursor函数的备注中强调&#xff0c;如果Class Cursor非空&#xff0c;那…

视频编解码基础

文章目录前戏编解码技术流程主流视频编码标准视频传输面临的问题视频传输差错控制视频传输Qos质量保证参数人类视觉系统HVS 以及相应编码措施正餐编码层次与码流结构PB帧编码IBBP序列编码结构图像编码结构条带编码结构宏块编码结构块编码结构预测技术码率控制实例H264前戏 编解…

实时语音通讯丢包补偿技术

文章目录基于发送端丢包补偿技术原理与媒体无关的前向差错纠正媒体相关前向差错纠正交织技术基于接受端丢包补偿技术基于插入方法基于插值方法基于重构的方法应用建议非交互式交互式拓展阅读参考丢包补偿技术可以分为两类&#xff1a;基于发送端补偿、基于接受端补偿 基于发送…

关于并发概念的一些笔记

目录1、基于锁的并发数据结构1、并发计数器2、懒惰计数器3、并发链表4、并发队列5、并发散列表总结2、条件变量使用&#xff08;POSIX&#xff09;生产者/消费者 &#xff08;有界缓冲区问题&#xff09;覆盖条件扩展3、信号量使用二值信号量&#xff08;锁&#xff09;0值信号…

对于线程并发模型与事件并发模型的思考

这里将以对话的形式进行&#xff1a; A&#xff1a; 普通的线程是可以被其他线程中断掉的&#xff0c;而基于select、epoll的事件处理函数实际上是不可以被其他事件&#xff08;线程&#xff09;中断的。 我这个理解对吗&#xff1f; B&#xff1a; 图片里的应该是对是否…

Ubuntu 14.10 -- 异次元软件世界

Ubuntu 14.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统 [ 系统工具 - Linux // 2014-10-25 ]一说到 Linux&#xff0c;就不得不提目前最红火的 Ubuntu 发行版了&#xff01;它拥有绚丽的界面&#xff0c;甚至跟以时尚为卖点的 Mac OSX 相比也有过之而…

System Design笔记:在线售票系统设计

文章目录何为在线售票系统&#xff1f;系统目标和要求1、功能要求2、非功能性需求3、设计注意事项4、容量估算5、系统API1.SearchMovies2.ReserveSeats6、数据库设计7、高级设计8、细节模块设计9、流程服务器如何跟踪所有尚未预订的active预订&#xff1f;服务器如何跟踪所有等…

流媒体协议初探(MPEG2-TS、RTSP、RTP、RTCP、SDP、RTMP、HLS、HDS、HSS、MPEG-DASH)

目录一、综述需求分析协议定制二、MPEG2-TS协议三、RTSP协议、RTP、RTCP、SDPRTSPRTP、RTCP、SDP四、RTMP五、HLS、HDS、HSSHLSHDS和HSS六、MPEG-DASH协议具体内容应用七、流媒体服务器流媒体服务器的功能与挑战客户端支持协议支持应用场景应用特点扩展技术广告投放录屏其他一、…

eclipse偶尔会反映迟钝,直接无视其报错

比如&#xff0c;你在web.xml中配置了什么东西&#xff0c;在有的时候不一定就会立即被eclipse察觉到&#xff0c;即便你的配置正确了&#xff0c;甚至重启了几次服务器&#xff0c;它仍然给你报错 比如说&#xff0c;刚才我在web.xml中配置了一个taglib&#xff0c;并且tld文件…