|
- //3_21.cpp : 构造奇数阶魔方阵
- #include <iostream>
- #include <iomanip>
- using namespace std;
- int main()
- {
- cout<<"请输入需要显示的奇数魔方值n=2k+1 :";
- int n ; //n阶
- cin>>n; //由用户输入n阶
- int * a = new int [n*n]; //申请2维(n行 * n列)数组
- memset(a, 0, n*n*sizeof(int)); //数组内存初始化为“0”
- int row = 0; //行号从顶行开始
- int col = n/2; //列号从正中间列开始
- for(int num = 1; num <= n*n; ++num) //关键循环,填写奇数魔方数值
- {
- a[row * n + col] = num; //填写数据
- row = (row+n-1)%n; //填写上一行(%n是为了不越界)
- col = (col+1)%n; //填写右一列(%n是为了不越界)
- if(a[row * n + col]) //如果该位置已经有数值
- { row = (row+2)%n; //在正下方开始写数据(行号)
- col = (col-1+n)%n; //在正下方开始写数据(列号)
- }
- }
- //以下代码把奇数魔方数显示出来
- int * Csum = new int [n]; //用于统计列数值的和
- memset(Csum, 0, n*sizeof(int)); //数组内存初始化为“0”
- int Rsum=0; //把行累加器初始化为0
- for (int i=0; i<n*n; ++i)
- {
- Rsum += a[i]; //累计行内数据的和
- Csum[i%n] += a[i]; //累计列内数据的和
- cout<<setw(4)<<a[i]<<" "; //显示魔方数
- if((i+1)%n==0)
- {
- cout<<" "<<Rsum<<endl; //显示n个数值后,再显示该行内数值的和,再换行
- Rsum=0; //把行累加器恢复为0
- }
- }
- cout<<endl;
- for (i=0; i<n; ++i)
- cout<<setw(4)<<Csum[i]<<" "; //显示各列内数值的和
- cout<<endl;
- delete [] a; //释放内存
- delete [] Csum; //释放内存
- return 0;
- }
- /* 程序运行结果如下:
- 请输入需要显示的奇数魔方值n=2k+1 :5
- 17 24 1 8 15 65
- 23 5 7 14 16 65
- 4 6 13 20 22 65
- 10 12 19 21 3 65
- 11 18 25 2 9 65
- 65 65 65 65 65
- Press any key to continue
- */
- /*我碰到的一个小问题和解决办法,同时和大家分享一下
- 代码复制到VC6中时汉字出现乱码,解决方法竟然如此
- 非常简单,也着实令人纳闷。解决方法就是在复制代码的时候打开中文输入法。
- 我遇到这个问题时是我的代码是在VC6中编写调试的,因为共享出来时需要把代码从VC6中拷贝到浏览器中时,所有注释中的汉字都变成问号了,在网上搜索到这个方法,确实能解决问题。
- */
复制代码 |
上一篇: 适合VS2022的小番茄来了Visual Assist X_10.9.2440_0_Cracked.PiaoYun_P.Y.G_64位下一篇: MFC落伍了,呵呵!
|