C/C++小程序学习:n*n魔方矩阵实现每行、每列、每一对角线上的元素之和相等
2013-04-24 19:14
836 查看
用一个程序实现n*n魔方矩阵中,每一行、每一列、每一对角线上的元素之和相等。
矩阵规律:
本程序只适合基数,解释如下:
N 为奇数时,此题中N设为5
(1) 将1放在第一行中间一列;
(2) 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向行走,如向右上
每一个数存放的行比前一个数的行数减1,列数加1
(3) 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
矩阵规律:
本程序只适合基数,解释如下:
N 为奇数时,此题中N设为5
(1) 将1放在第一行中间一列;
(2) 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向行走,如向右上
每一个数存放的行比前一个数的行数减1,列数加1
(3) 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
#include<stdio.h> int main() { int a[100][100],x;/*初始化*/ int i,j,m,n,temp; printf("输出魔方矩阵n="); scanf("%d",&x); while(x) { if(!(x%2)) { printf("你输入了偶数,很遗憾本程序将退出"); return 0; } else { for(i=0;i<x;i++) for(j=0;j<x;j++) a[i][j]=0; i=0; j=x/2; a[i][j]=1; for(temp=2;temp<=x*x;temp++) { m=i; n=j; i--; j++; if(i<0) i=x-1; if(j>=x) j=0; if(a[i][j]!=0) { i=m+1; j=n; } a[i][j]=temp; } } for(i=0;i<x;i++) { for(j=0;j<x;j++) printf("%4d",a[i][j]); printf("\n"); } printf("输出魔方矩阵n="); scanf("%d",&x); } return 0; }
相关文章推荐
- C/C++小程序学习:n*n魔方矩阵实现每行、每列、每一对角线上的元素之和相等
- C++程序学习之实现手机通讯录功能模拟
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- C/C++小程序学习:二维矩阵行列元素互换
- 学习实践:使用模式,原则实现一个C++自动化测试程序
- 学习实践:使用模式,原则实现一个C++自动化测试程序
- 深度学习训练图片收集器——C++截图程序的实现2(键鼠钩子篇)
- 编写一个C#程序,要求定义一个行数和列数相等的二维数组, 并执行初始化,然后计算并输出数组两条对角线上的元素之和。
- 深度学习训练图片收集器——C++截图程序的实现1(需求分析篇)
- 如何实现容器元素的过滤(C++学习)
- 菜鸟学习c++—map使用练习 实现词频统计程序
- 改善C++ 程序的150个建议学习之建议10:优化结构体中元素的布局
- 学习实践:使用模式,原则实现一个C++自动化测试程序
- PAT程序设计考题——甲级1057( stock 分块查询) C++实现
- VS2010 C++学习(5):基于DirectShow的视频预览录像程序
- 改善C++ 程序的150个建议学习之建议33:小心翼翼地重载operator new/ operator delete
- c++之学习程序Te_St(转换)
- 【C++ STL应用与实现】56: 使用std::unique删除重复元素
- C++学习笔记-----用位运算实现加减乘除
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码