VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1147|回复: 0

[交流] 从实例中学C语言 实例3_21( //3_21.cpp : 构造奇数阶魔方阵)

[复制链接]
46_avatar_middle
最佳答案
0 
在线会员 发表于 2022-2-24 21:41:54 | 显示全部楼层 |阅读模式
  1. //3_21.cpp : 构造奇数阶魔方阵
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;

  5. int main()
  6. {
  7.         cout<<"请输入需要显示的奇数魔方值n=2k+1 :";
  8.         int n ;                                                        //n阶
  9.         cin>>n;                                                        //由用户输入n阶
  10.         int * a = new int [n*n];                //申请2维(n行 * n列)数组
  11.         memset(a, 0, n*n*sizeof(int));        //数组内存初始化为“0”
  12.         int row = 0;                                        //行号从顶行开始
  13.         int col = n/2;                                        //列号从正中间列开始

  14.         for(int num = 1; num <= n*n; ++num)        //关键循环,填写奇数魔方数值
  15.         {
  16.                 a[row * n + col] = num;                //填写数据
  17.                 row = (row+n-1)%n;                        //填写上一行(%n是为了不越界)
  18.                 col = (col+1)%n;                        //填写右一列(%n是为了不越界)
  19.                 if(a[row * n + col])                //如果该位置已经有数值
  20.                 {        row = (row+2)%n;                //在正下方开始写数据(行号)
  21.                         col = (col-1+n)%n;                //在正下方开始写数据(列号)
  22.                 }
  23.         }

  24. //以下代码把奇数魔方数显示出来

  25.         int * Csum = new int [n];                //用于统计列数值的和
  26.         memset(Csum, 0, n*sizeof(int));        //数组内存初始化为“0”
  27.         int Rsum=0;                                                //把行累加器初始化为0
  28.         for (int i=0; i<n*n; ++i)
  29.         {       
  30.                 Rsum += a[i];                                //累计行内数据的和
  31.                 Csum[i%n] += a[i];                        //累计列内数据的和
  32.                 cout<<setw(4)<<a[i]<<"  ";        //显示魔方数
  33.                 if((i+1)%n==0)                               
  34.                 {
  35.                         cout<<"    "<<Rsum<<endl;                //显示n个数值后,再显示该行内数值的和,再换行
  36.                         Rsum=0;                                        //把行累加器恢复为0
  37.                 }
  38.         }

  39.         cout<<endl;

  40.         for (i=0; i<n; ++i)
  41.                 cout<<setw(4)<<Csum[i]<<"  ";        //显示各列内数值的和
  42.         cout<<endl;

  43.         delete [] a;                                        //释放内存
  44.         delete [] Csum;                                        //释放内存
  45.         return 0;
  46. }

  47. /* 程序运行结果如下:
  48. 请输入需要显示的奇数魔方值n=2k+1 :5
  49.   17    24     1     8    15      65
  50.   23     5     7    14    16      65
  51.    4     6    13    20    22      65
  52.   10    12    19    21     3      65
  53.   11    18    25     2     9      65

  54.   65    65    65    65    65
  55. Press any key to continue
  56. */

  57. /*我碰到的一个小问题和解决办法,同时和大家分享一下
  58. 代码复制到VC6中时汉字出现乱码,解决方法竟然如此
  59. 非常简单,也着实令人纳闷。解决方法就是在复制代码的时候打开中文输入法。
  60. 我遇到这个问题时是我的代码是在VC6中编写调试的,因为共享出来时需要把代码从VC6中拷贝到浏览器中时,所有注释中的汉字都变成问号了,在网上搜索到这个方法,确实能解决问题。
  61. */
复制代码




上一篇:适合VS2022的小番茄来了Visual Assist X_10.9.2440_0_Cracked.PiaoYun_P.Y.G_64位
下一篇:MFC落伍了,呵呵!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-24 23:00

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表