很久沒寫代碼了,這(那)幾天真是累死了。。。先寫一個幻方的程序吧

?

  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.pswp.cn/news/376577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376577.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

#pragma once

http://baike.baidu.com/view/1276747.htm?fraladdin 轉載于:https://www.cnblogs.com/prayer521/p/4069040.html

后臺系統可擴展性學習筆記(八)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…

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫&#xff08;表&#xff09;拆分成多庫&#xff08;表&#xff09;&#xff0c;打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而&#xff0c;除卻數據量外&#xff0c;還有一個極其影響單庫性能…

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;提供的數據存儲、檢索機制并不是基于表關系建模的。沒有…

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示&#xff0c;由于手機卡類型的不同&#xff0c;導致手機卡存儲容量以及可以存儲信息不同&#xff0c;就要涉…

后臺系統可擴展性學習筆記(十三)緩存

文章目錄在哪兒加緩存緩存什么內容緩存原始查庫結果緩存數據對象怎么查詢緩存結果預留緩存模式直讀模式直寫模式回寫式緩存繞寫式緩存提前刷新模式緩存滿了如何處理參考讀寫分離、分庫分表、反范式化、采用 NoSQL……如果這些擴展手段全都上了&#xff0c;數據響應依舊越來越慢…

[linux]gdb調試

使用gdb可以在命令行方便地調試&#xff0c;并且能以命令程序的方式調試源代碼。 常用命令簡寫print-p,step-s,next-n 進入gdb //方式一 gdb test//test 為可執行文件&#xff0c;使用-g編譯得到 //方式二 gdb -q //不顯示版權信息 file test //file命令打開文件 退出gdb quit …

后臺系統可擴展性學習筆記(十四)異步機制與MQ

對于 Web 服務而言&#xff0c;提升可擴展性的主要途徑是將耗時的同步工作改成異步處理&#xff0c;從而允許將這些工作“外包”給多個 Worker 去做&#xff0c;或者提前完成能夠預知的部分。 異步機制與可擴展性之間的關系需要從&#xff08;異步&#xff09;并行處理的優勢說…

RegisterClientScriptBlock與 RegisterStartupScript區別

Page.ClientScript.RegisterClientScriptBlock而用Page.ClientScript.RegisterStartupScript是因為&#xff1a;RegisterStartupScript 把script放置在ASP.NET page的底部&#xff0c;而RegisterClientScriptBlock把script放置在ASP.NET page的頂部&#xff0c;用RegisterClien…

【Web后端筆記】SQL Server與java數據類型對應

編號數據庫類型JDBC類型JDBC索引描述1intjava.lang.Integer4 2varcharjava.lang.String12 3charjava.lang.String1 4ncharjava.lang.String1 5nvarcharjava.lang.String12 6textjava.lang.String-1 7ntextjava.lang.String-1 8tinyintjava.lang.Integer-6 9intjava.lang.Intege…

后臺系統可擴展性學習筆記

整理了一下筆記目錄&#xff0c;將以前學習的一些知識串聯起來了&#xff0c;比如cdn、負載均衡、中間件&#xff0c;以前只是各自了解了一點&#xff0c;現在大概理清了后臺系統設計中他們各自的作用。 后臺系統可擴展性學習筆記&#xff08;一&#xff09;概要 后臺系統可擴展…

TFS 強制刪除鎖定文件(數據庫)

TFS&#xff1a;TFS2010 VS&#xff1a;VS2012 OS:Windows2008 DB:Sqlserver2008 R2 我們在團隊開發當中&#xff0c;版本控制是一個不可忽略的工具。我們團隊使用的是TFS2010這個版本控制器。 但在團隊實際協作開發當中&#xff0c;團隊成員難免有電腦損壞或人員離職情況&…

【轉】Java:String、StringBuffer和StringBuilder的區別

1 String String&#xff1a;字符串常量&#xff0c;字符串長度不可變。Java中String是immutable&#xff08;不可變&#xff09;的。 String類的包含如下定義&#xff1a; [java]view plaincopy /** The value is used for character storage. */ private final char value[]…