java 二维数组奇数金字塔_二维数组:奇数阶魔方 | 新思维:C语言程序设计

幻方,有时又称魔方,由一组排放在正方形中的整数组成,其每行、每列以及两条对角线上的数之和均相等。通常幻方由从到的连续整数组成。

Siamese方法(Kraitchik 1942年,pp. 148-149)是构造奇数阶幻方的一种方法,说明如下:

1)把1放置在第一行的中间

2)从2开始直到n×n的各数依次放在右上方格中

3)当右上方格出界的时候,则由另一边则回绕。例如1在第1行,则2应放在最下一行,列数同样加1

4)如果按上面规则确定的位置上已有数,或上一个数位于最右上方时,则把下一个数放在上一个数的下面 按照以上步骤直到填写完所有方格。

huanfang.JPG

输入: 自然数n(1<=n<=20,n是奇数)

输出: n行,每行n个数,每个数占4个字符位置。 提示:使用 printf("%4d", x) 来打印

思路分析

下面的程序使用 i 表示行,用 j 表示列, k 表示要放置的数,k 的范围是 [1..n*n]

放置的过程可以简要描述为:

1) 确定第0个数的位置

2) 放置 1~ n*n 个数:确定初步位置,也就是 i 和 j 的值; 如果出界,就进行调整;放置 k

3) 确定初步位置有两种选择:放置在前一个数的下方或者右上方

奇数魔方的自然语言描述如下:

确定1的位置坐标 i 和 j;

在 i 和 j 这个位置放置 1;

for (放置2~n*n个数) {

if (k in [1,n+1,2*n+1, ..., (n-1)*n+1])

下方;

else {

右上方;

}

if (在第0行) 调整到第n行;

if (在第n+1列) 调整到第1列;

放置 k 到 a[i][j];

}

输出二维矩阵;

确定1的位置坐标 i 和 j;

在 i 和 j 这个位置放置 1;

for (放置2~n*n个数) {

if (k in [1,n+1,2*n+1, ..., (n-1)*n+1])

下方;

else {

右上方;

}

if (在第0行) 调整到第n行;

if (在第n+1列) 调整到第1列;

放置 k 到 a[i][j];

}

输出二维矩阵;

奇数魔方的C语言参考代码如下:

#include

#define N 21

int main(int argc, char *argv[])

{

int n, k, i, j;

int a[N][N];

scanf("%d", &n);

i= 1; j=(n+1)/2;

a[i][j]=1;

for (k=2; k<=n*n; k++) {

if (k%n==1)

i = i+1;

else {

i = i-1; j = j+1;

}

if (i==0) i = n;

if (j==n+1) j = 1;

a[i][j] = k;

}

for (i=1; i<=n; i++) {

for (j=1; j<=n; j++)

printf("%4d", a[i][j]);

printf("\n");

}

return 0;

}

#include

#define N 21

int main(int argc, char *argv[])

{

int n, k, i, j;

int a[N][N];

scanf("%d", &n);

i= 1; j=(n+1)/2;

a[i][j]=1;

for (k=2; k<=n*n; k++) {

if (k%n==1)

i = i+1;

else {

i = i-1; j = j+1;

}

if (i==0) i = n;

if (j==n+1) j = 1;

a[i][j] = k;

}

for (i=1; i<=n; i++) {

for (j=1; j<=n; j++)

printf("%4d", a[i][j]);

printf("\n");

}

return 0;

}

奇数魔方的JAVA参考代码如下:

import java.util.Scanner;

public class P1304 {

public static void main(String[] args) {

Scanner cin = new Scanner(System.in);

int n, k, i, j;

n = cin.nextInt();

int [][] a = new int[n+1][n+1];

i= 0; j=(n+1)/2;

for (k=1; k<=n*n; k++) {

if (k%n==1 || n==1)

i = i+1;

else {

i = i -1; j = j+1;

}

if (i==0) i = n;

if (j==n+1) j = 1;

a[i][j] = k;

}

for (i=1; i<=n; i++) {

for (j=1; j<=n; j++)

System.out.printf("%4d", a[i][j]);

System.out.printf("\n");

}

}

}

import java.util.Scanner;

public class P1304 {

public static void main(String[] args) {

Scanner cin = new Scanner(System.in);

int n, k, i, j;

n = cin.nextInt();

int [][] a = new int[n+1][n+1];

i= 0; j=(n+1)/2;

for (k=1; k<=n*n; k++) {

if (k%n==1 || n==1)

i = i+1;

else {

i = i -1; j = j+1;

}

if (i==0) i = n;

if (j==n+1) j = 1;

a[i][j] = k;

}

for (i=1; i<=n; i++) {

for (j=1; j<=n; j++)

System.out.printf("%4d", a[i][j]);

System.out.printf("\n");

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拷贝构造函数与赋值函数(运算符重载)(1)

拷贝构造函数拷贝构造函数在三种情况下会被使用1.使用对象来初始化对象时2.当函数的形参是对象时3.当函数的返回值为对象时 2,3情况的本质还是1 //Test1.h #include<iostream> using namespace std; class ST { private:int a;long b; public:ST(int a0, long b0):a(a),…

GOOGLE不让我访问啦?

GOOGLE不让我访问啦? 今天上GOOGLE出现了这么一个画面,可是我就是不知道我的电脑到底中了什么毒,平常我没上什么特殊的网站,也没下载什么软件,因为这电脑我只用来做些基本的开发和看看园子里的文章而已.真不知道是怎么一回事.posted on 2007-05-05 12:46 黄尚 阅读(...) 评论(…

java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?

方法1&#xff1a;通过Thread类中的isAlive()方法判断线程是否处于活动状态。线程启动后&#xff0c;只要没有运行完毕&#xff0c;都会返回true。【注】如果只是要等其他线程运行结束之后再继续操作&#xff0c;可以执行t.join()&#xff0c;即&#xff1a;在t执行完毕前挂起。…

大数据分析和人工智能科普

一、大数据 1.1 大数据&#xff08;Big Data&#xff09; 众说纷纭&#xff01; 个人认为&#xff0c;大数据中的“大”&#xff0c;不仅仅是涉及数据规模&#xff0c;而且包含“价值“这个层面。其实无非就是大量的信息罢了&#xff0c;但是我们却能 通过各种手段从这些信息中…

Redis API的使用与理解

一、Redis 基础&#xff1a; 1、通用命令&#xff1a; keys [pattern]&#xff1a; keys * #遍历所有key&#xff1b;keys he* #以he开头的key&#xff1b; keys he[a-e]* #以‘he’开头第三个字母是a-e之间&#xff1b; keys ph? #?代码一位&#xff0c;以ph开头且字母是…

点击底部input输入框,弹出的软键盘挡住input(苹果手机使用第三方输入法 )

测试移动端页面的时候&#xff0c;偶然发现点击底部input输入框时&#xff0c;弹出的虚拟键盘偶尔会挡住input输入框。 输入框固定在页面底部&#xff0c;如图所示&#xff1a; input固定底部设计图.png点击底部input输入框唤起软键盘时&#xff0c;软键盘挡住输入框。如图所示…

java采集温湿度水浸_机房水浸传感器:智能生活不可或缺的漏水传感器

原标题&#xff1a;机房水浸传感器&#xff1a;智能生活不可或缺的漏水传感器智能化的飞速发展让人们的生活发生了重大改变&#xff0c;为保证机房的安全、稳定、高效运行&#xff0c;网络设备的良好运行状态和设备使用寿命与安全&#xff0c;通常会对网络运行环境的电力供应、…

创建型模式:原型模式

个人公众号原文&#xff1a;创建型模式&#xff1a;原型模式 五大创建型模式之五&#xff1a;原型模式。 简介 姓名 &#xff1a;原型模式 英文名 &#xff1a;Prototype Pattern 价值观 &#xff1a;效率第一 个人介绍 &#xff1a; Specify the kinds of objects to create u…

我的前端工具集(五)提示工具之模态窗提示

我的前端工具集&#xff08;五&#xff09;提示工具之模态窗提示 liuyuhang原创&#xff0c;未经允许禁止转载 目录 我的前端工具集 1、需求 很多页面操作都需要提示&#xff0c;比如操作成功&#xff0c;操作失败之类。 总不能没事就console.log或者alert吧。 所以一个操作提…

Java 8 Friday:可选将保留为Java中的一个选项

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

七天开发记录(3)

今天在网上找到了一个开发记账本微信小程序的网址 我看了一下这个APP的源代码&#xff0c;其用分为两个大包。 转载于:https://www.cnblogs.com/zjl-0217/p/10428525.html

TMS320F28335——IO控制/定时计操作

一、实现GPIO控制 1.硬件连接 从电路原理图上看来&#xff0c;LED灯是接在GPIO34 上的。 2.IO设置 2.1设置功能 GPXMUX1/2&#xff1a;功能选择寄存器   GPXMUX1/2 每组 IO 一般有 32 个 IO 口可以配置。GPXMUX1 对应每组的低 16 个 IO 口&#xff0c;GPXMUX2 对应高 16 个…

比Python、Java更快的 Go 语言,能否称霸江湖?

关注之后加星标&#xff0c;江湖要事早知道 ​ 文章来源&#xff1a;jb51.net 有一种语言堪称比语言排行榜前五热门选手的Python、Java更快&#xff0c;它就是GO语言。 Go于2009年11月正式宣布推出&#xff0c;成为开放源代码项目&#xff0c;并在Linux及Mac OS X平台上进行了实…

嗨,您好 。 。 ! 您如何评价Java / Java EE技能?

要知道&#xff0c;就是要知道你一无所知。 那就是真正知识的含义。 苏格拉底 这篇文章旨在为读者提供Java生态系统及其技术堆栈的快速概述。 老实说&#xff0c;从Java EE 7&#xff0c;Java SE 8到Java Embedded 8…&#xff0c;Java平台进行了许多革命性的更改和添加。 哇…

simulinkveristandlabview联合仿真——模型导入搭建人机界面

目录 1.软件版本 2.搭建simulink仿真模型 编译错误 3.导入veristand并建立工程 4.veristand导入labview labview显示veristand工程数据 labview设置veristand工程数据 运行labview工程 1.软件版本 matlab2020a&#xff0c;veristand2020 R4&#xff0c;labview2020 SP…

Java程序员的典型工作过程有哪些_Java程序员都要经历哪些阶段

原标题&#xff1a;Java程序员都要经历哪些阶段程序员从菜鸟到优秀的过程是需要时间&#xff0c;经验&#xff0c;不断的进阶&#xff0c;小编和大家一起看看每个阶段都要经历哪些成长阵痛&#xff1a;没有防卫这个阶段很快就会过去&#xff0c;因为有无数的书本和”前辈”在提…

关于DataFormWebPart中CreatedModifiedInfo信息的分开使用

以下是问题的描述,我先从数据说起.数据存储在一个叫pages的自定义列表中,该列表除默认的栏外,另增加了一栏"Abstract",为多行文本,用于存储文章摘要信息.当该列表中录入数据后如图: 这时,当我们点列表项如"page2"时,会进入该项的 DispForm.aspx页面.如图:这…

Day47 Django基础部分、路由配置、空间名称

1.最简单的路由配置 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表&#xff1b;你就是以这种方式告诉Django&#xff0c;对于客户端发来的某个URL调用哪一段逻辑代码对应执行。 1.1 例1&#xff1a; 第一步&#xff1a;在…

6-3 向二分搜索树中添加元素 6-4 改进添加操作:深入理解递归终止条件

二分搜索树添加新元素60, 60>41(根节点)&#xff0c;所以一定要插入到41的右子树。 接着在和58比较 1 public class BST<E extends Comparable<E>> {//对于二分搜索树所存储的内容支持泛型&#xff0c;所以在这里写一个E&#xff0c;此外二分搜索树不是支持所有…

ClassNotFoundException:是否减慢了您的JVM?

大多数Java开发人员都熟悉臭名昭著且非常常见的java.lang.ClassNotFoundException 。 虽然通常已经很好地了解了此问题的根源&#xff08;类路径中缺少类/库&#xff0c;类加载器委派问题等&#xff09;&#xff0c;但对整体JVM和性能的影响通常是未知的。 这种情况可能会对您的…