灰灰-324-2019华科软院学硕上机(二)-魔方阵:vector、resize()、setw()

2023-11-11

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。阶数大于等于3。
  如3×3的魔方阵: 
  8 1 6 
   3 5 7 
   4 9 2

  奇数魔方阵的排列规律如下:
  (1)将1放在第一行中间一列;
  (2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
  (3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
  (4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
  (5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;

输入格式:

输入魔方阵的阶数(阶数大于等于3的奇数阵)

输出格式:

输出魔方阵

输入样例:

3

输出样例:

8 1 6 
3 5 7 
4 9 2
#include <iostream>
#include<vector>
#include<iomanip>
using namespace std;
int main() {
	int n;
	cin >> n;
	vector< vector<int> > f(n);
	for(int i = 0; i < f.size(); i++) {
		f[i].resize(n); //改变vector中元素的数目。 
	}
	int r = 0,c = n / 2;
	f[r][c] = 1; //初始化1的位置 
	for(int i = 2; i <= n * n; i++) {
		if((r == 0) &&(c == n - 1)) {//若上一个数在第0行,最后一列,则行数加一,列数不变 
			f[++r][c] = i ;
			continue;
		} 
		if(r == 0) { //若上一个数在第0行,则下一个数在最后一行,列数加一 
			r = n - 1;
			c++;
			f[r][c] = i;
			continue;
		}
		if(c == n - 1) { //若上一个数在最后一列,在下一个数列数为0,行数减一 
			c = 0;
			r--;
			f[r][c] = i;
			continue;
		}
		// 如果行数减一,列数加一后的位置上有数,则直接放入上一个数下面 
		r--; 
		c++;
		if(f[r][c]) { 
			r++;
			c--;
			r++;
			f[r][c] = i;

		} else {
			f[r][c] = i;
		}
	}
	//输出 
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < n; j++) {
			if(j == n - 1)
				cout << setw(2) << f[i][j];
			else
				cout << setw(2) << f[i][j];
		}
		cout << endl;
	}
	return 0;
}

F2

  #include <stdio.h>
  // Author: http://furzoom.com/
  // N为魔方阶数
  #define N 3
   
  int main()
  {
      int a[N][N];
      int i;
     int col,row;
  
     col = (N-1)/2;
     row = 0;
  
     a[row][col] = 1;
  
     for(i = 2; i <= N*N; i++)
     {
         if((i-1)%N == 0 )
         {
             row++;
         }
         else
         {
             // if row = 0, then row = N-1, or row = row - 1
             row--;
             row = (row+N)%N;
  
             // if col = N, then col = 0, or col = col + 1
             col ++;
             col %= N;
         }
         a[row][col] = i;
     }
     //输出 
     for(row = 0;row<N;row++)
     {
         for(col = 0;col < N; col ++)
         {
             printf("%2d",a[row][col]);
         }
         printf("\n");
     }
     return 0;
 }

 

下面是关于魔方阵的算法及c语言实现,(奇魔方、偶魔方、单偶魔方)

https://www.cnblogs.com/furzoom/p/furzoom-magic-square.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

灰灰-324-2019华科软院学硕上机(二)-魔方阵:vector、resize()、setw() 的相关文章

随机推荐

  • 开源 Android App 增量更新库 版本升级

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 开源 Android App 增量更新库 版本升级 经过几天的重构 我将之前写的一个Android 应用增量更新的示例程序重构为了一个开源库 现在已经push 到 GitH
  • Sourcetree的分支创建与合并

    一 Sourcetree简单介绍 通过Git可以进行对项目的版本管理 但是如果直接使用Git的软件会比较麻烦 因为是通过一条一条命令进行操作的 Sourcetree则可以与Git结合 提供图形界面 使用会方便很多 Git和Sourcetre
  • java web web inf lib_Eclipse java web项目手册在WEB-INF中设置lib文件夹(Eclipse java web project manual set lib f...

    Eclipse java web项目手册在WEB INF中设置lib文件夹 Eclipse java web project manual set lib folder in WEB INF 我从svn检查了一个项目 该项目有一个名为 ws
  • SpringBoot JSON全局日期格式转换器

    参考资料 SpringBoot日期格式转换 SpringBoot配置全局日期格式转换器 在Spring Boot中定制Jackson ObjectMapper详解 SpringBoot中jackson日期格式化问题 Serializatio
  • 学习Javascript这一篇就足够

    1 js的特点以及解释性 JavaScript 是一种跨平台的脚本语言 1 1 解释型 JavaScript是一门解释型编程语言 解释型编程语言指代码不需要手动编译 而是通过解释器边编译边执行 所以要运行JS 我们必须现在计算机中安装 JS
  • 轻量化网络学习 2 shufflenet网络

    文章目录 归纳 论文 归纳 本文通过对之前轻量化的弊端进行分析 提出了shufflenet 该网络最大化了分组点卷积的作用 并提出通道重排来提高进行通道间的信息交流 节约了算力成本 论文 学习目标 分组点卷积过程 优势 通道重排方式 改进版
  • 整数反转 算法面试题 算法 给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果

    给你一个 32 位的有符号整数 x 返回 x 中每位上的数字反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 231 231 1 就返回 0 上代码 public static int reverse int x if x 0
  • java统计文章中单词出现的次数

    统计一篇文章中单词出现的次数 要存储单词和次数 根据次数排序输出 要用Map数据结构保存键值对 首先想到是用TreeMap
  • OpenType字库文件

    OpenType字库文件 一个OpenType字库文件以表的格式包含有数据 这些数据包含一个TrueType或一个PostScript outline 字库 光栅化程序使用字库里包含的表中的数据来渲染TrueType或者PostScript
  • 零基础程序员如何自学编程?用这6种方法就够了!

    PHP从入门到放弃 C语言从入门到放弃 Python从入门到放弃 在自学编程的过程中 一部分程序员遇到冰冷的英语字母 枯燥的编程教程 果断选择了放弃 但其实自学编程不是那么难 只要是理工科生 逻辑思维还行的小伙伴 编程入门完全可以 下面给程
  • 用Podman来代替Docker Desktop

    文章目录 用Podman来代替Docker Desktop 更新 前言 在Mac上安装Podman 在Windows上安装Podman 测试Podman 用podman compose运行Docker Compose 用Podman直接操作
  • Android实现省市区三级联动效果

    PickerView控件的作者在3 0版本中对PickerView源码进行了重构 重构后的PickerView添加了很多可自定义的属性 比如可以自定义文字颜色 大小等 使用也更加方便了 只是改动较大 使用方法也与2 0版本有不少差别 由于2
  • datacom-IPV6

    一 概念 1 IPV6与IPV4相比的优点 1 地址容量大 2 层次结构设计更合理 方便路由汇聚 3 即插即用 SLAAC 4 报头经过了简化 提高了转发效率 5 更安全 IPSEC 6 更好的移动性 7 QOS增强 2 IPV6和IPV4
  • 03Linux下静态库和动态库(共享库)的制作与使用

    Linux下静态库和动态库 共享库 的制作与使用 Linux操作系统支持的函数库分为 静态库 libxxx a 在编译时就将库编译进可执行程序中 lib 前缀 固定 a 后缀 固定 优点 程序的运行环境中不需要外部的函数库 缺点 可执行程序
  • Oracle 报表常用sql

    Oracle 报表常用sql 数据库建模式 用户 表空间 表 数据语句在最末尾 一 数据类型转化 函数 translate 字段 USING NCHAR CS 样例 SELECT translate COLUMN1 USING NCHAR
  • Centos8安装MySQL(亲测有效)

    1 下载压缩包 https cdn mysql com Downloads MySQL 5 7 mysql 5 7 29 1 el7 x86 64 rpm bundle tar 2 上传到服务器 命令 rz 3 解压 tar xvf mys
  • dll修复工具安装教程

    电脑显示dll软件报错 相信有很多小伙伴遇到过这种情况 一起来看看呗 亲测有用 可以一键检测和修复Windows系统中存在的DLL问题 SYS问题以及注册表问题 并拥有完善的DLL库供用户搜索下载 此外dll修复工具还支持注册表优化 启动项
  • 【论文&模型讲解】多模态对话 Multimodal Dialogue Response Generation

    文章目录 前言 0 摘要 1 Introduction 2 相关工作 2 1 文本对话回复生成 2 2 Text to Image 生成 3 Problem Formailzation 4 Approach 4 1 多模态 Tokeniza
  • C#中this关键字的使用

    01 消除字段歧义 public class Writer private int age private String name public Writer int age String name this age age this na
  • 灰灰-324-2019华科软院学硕上机(二)-魔方阵:vector、resize()、setw()

    魔方阵 古代又称 纵横图 是指组成元素为自然数1 2 n的平方的n n的方阵 其中每个元素值都不相等 且每行 每列以及主 副对角线上各n个元素之和都相等 阶数大于等于3 如3 3的魔方阵 8 1 6 3 5 7 4 9 2 奇数魔方阵的排列