编程语言-怎么写啊,小白想不出来,求大神

问题描述

怎么写啊,小白想不出来,求大神

幻方是在一个n*n的矩阵中放置从1到n 2 的数,每个数只出现一次,并且在每行,每列及对角线的和是一样的。 这个问题的焦点是奇数幻方,它意味着n是奇数,你将使用下面的方法来构造奇幻方阵,最基本的规律是向右上角移动,下面让我们一步一步进行。

1、让我们开始在最上面的一行的中间放上1(在这个例中n=3) 你的任务是写一个程序去找出哪个数会被放到右下角在n幻方中,当然,你可以使用上面的规律去构造幻方。

2、我们假定最后一行是第一行的上一行,向右上角移动意思是向上移一行并且向右移一列,因此2就放置到最后一行的最后一列上。

3、同样,在最右边的列再向右移时,我们认为第1列为其最右边的列,因此3必须放置到最左边的一列上,并且向上移一行.

4、当向右上角放数时,该处已放置了数该怎办呢?当这种情况发生时,这个规律就在该次放弃一次,向右上角移的规律用直接向下放置的来代替,因此4会被放到3的下面。

5、然后:

6、6在最右上角,7正常会放到最后一行上,又因6是最右边,7正常位置应该是最左边,这个位置是左下角,这个位置方法放置7,不幸的是,这里已放置了4,因此7只能入到6的下面。

8 1 6
3 5 7
4 9 2

Input

输入n(n<100)

当输入为0时结束。

Output

对每个n,你需输出对应的幻方。每行两个数字之间有一个空格

Sample Input

3
5
0

Sample Output

8 1 6
3 5 7
4 9 2
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

解决方案

http://www.cnblogs.com/qianyaoyuan/archive/2013/03/30/2990058.html

解决方案二:

http://blog.csdn.net/yinxusen/article/details/5274540

解决方案三:

#include
#include
#include

void OddArr(int n)
{
int **a = (int **)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
a[i] = (int *)malloc(sizeof(int)*n);
i=0;
int j=n/2,m;
for(m=1;m<=n*n;m++)
{

a[i][j] = m;
if(m%n != 0)
{
i--;
j++;
if(i<0) i=i+n;
if(j==n) j=n-j;
}
else
{
i++;
if(i==n) i=n-i;
}
}
for( i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("n");
}
}

void main(){
int n;
scanf("%d",&n);
while(n%2==1)
{
OddArr(n);
scanf("%d",&n);
}
}


时间: 2024-08-01 17:37:36

编程语言-怎么写啊,小白想不出来,求大神的相关文章

oracle-我想问问,我这么写触发器,对不对,求大神解答

问题描述 我想问问,我这么写触发器,对不对,求大神解答 从来没有写过触发器,然后毕设需要,不知道写对了没,这是我建的表,要完成的功能是,当插入数据时,执行这个触发器,即循环插入数据,其中curr_time字段是时间类型,并且按照createdby1自增长方式增加,其中week_num字段从1一直循环到总共周数(count_week) create table F_FT_TIME ( ROW_ID NUMBER(18) not null, CURR_TIME DATE, START_DATE DA

c++-C++小白,初次写模板,有困难,求大神指点

问题描述 C++小白,初次写模板,有困难,求大神指点 #include "stdafx.h" #include #include using namespace std; template bool IsSort(const Contianer& cn) { for (auto it= cn.begin(); it!=cn.end(); it++) { auto min=cn.begin(); if ( min > *it) { return false; auto mi

c语言编程-小白一枚!求大神指点如何学习C

问题描述 小白一枚!求大神指点如何学习C 如题,我之前学习过java现在也在从事这方面的工作,想学习c确不知道从哪里下手 解决方案 我给一个过来人的答案吧 虽说不适什么大牛,但是也有一些小小的体会! 上了大学才知道有编程!开始就接触c语言,但就是不知道c能干啥!然后就是玩玩单片机,本科偏硬件专业,所以单片机和c搞了搞!最后也没干出来啥明堂!后来学了数据结构,卧槽-一下子感觉c语言脑洞大开!体会真的不一样!再后来看Java,搞安卓开发到现在!越来越体会到c是必须要学的!我支持你学c!!!首先把语法

控制器-小白单片机选片 求大神帮忙

问题描述 小白单片机选片 求大神帮忙 项目需求:做一个控制器,实现8路模拟量采集,2路脉冲信号采集,30路开关量采集: 30路开关量输出: 两个485通讯串口: 求各位大神帮忙 选一款单片机!!!! 在此谢过 ! 万分感谢! 解决方案 http://wenku.baidu.com/link?url=bc0udEBoPM12-yuQW8DA-ycDKXH2b1a6SlOYrwyJzpZ_GYmQjvkBdl78a6uitG-m66pi96-Vu06az5t35vGQ1U_1uG5NbB6nKPCb

跪求COS(片内操作系统)开发经验和资料 ,写过的一些源代码。求大神

问题描述 跪求COS(片内操作系统)开发经验和资料 ,写过的一些源代码.求大神 10C 5C 本童鞋刚刚毕业,从没接触过COS.嵌入式.会C,请问有什么资料可以参考啊?比如书,代码示例,或者文章博客也行. 解决方案 http://download.csdn.net/user/xin_o

c#-C#写一段监视程序,求大神指教

问题描述 C#写一段监视程序,求大神指教 当计算器点击log时,监测程序检测到信息,并在form窗口上显示出计算器点击的信息,求大神指教,谢谢 解决方案 参考spy++的代码,拦截wm_mousedown消息

串口接收数据调用类的方法跟直接在主程序里写方法有什么区别?求大神指教,刚用这个提问,没分了。

问题描述 串口接收数据调用类的方法跟直接在主程序里写方法有什么区别?求大神指教,刚用这个提问,没分了. 为什么我直接在主程序里写的时候没问题,调用类里的方法就获取不到数据 解决方案 要看你的代码,比如有没有用到全局变量之类的. 解决方案二: 我分步调试的时候是能拿到数据的,但是直接运行的时候就获取不到. 解决方案三: 分布调试用的时间多,调用接受类的时候数据已经过来了.直接运行数据没过来,估计是数据同步的问题

小白打算学习java,有些问题想问,求大神解惑

问题描述 ①入门推荐看什么书或什么教程(视频.文档)?②入门学习,重点要掌握哪些内容?③什么样的水平才算入门了?一般要多长时间?④进阶的水平要求?以及推荐用的书籍.资料?希望各位大神指点迷津,小弟拜谢! 解决方案 解决方案二:网上java基础视频看看都可以,掌握java基础知识,java基础掌握了底下慢慢的学习就方便.解决方案三:1.收藏多年的视频及书籍:.2.入门基础基本就是面向对象思想(封装.继承.多态),数组.泛型集合操作,IO操作,网络编程,线程基础.3.以上的掌握了,算是入门,如果之前

小白求助!!求大神解决

问题描述 我在做商品添加到购物车的页面,这个不知道咋错了,代码如下rivatevoidBind(){DataTabledt;DataRowdr;stringstr="";dt=newDataTable();dt.Columns.Add(newDataColumn("Id",str.GetType()));dt.Columns.Add(newDataColumn("bookname",str.GetType()));dt.Columns.Add(n