n阶方阵,数字从1~n^2,顺时针增大
运行结果如下图:
解题思路:可以将这个问题分解成x个外围正方形所围成的图形,外围的正方形又可以分为4个步骤,向右依次增大、向下依次增大、向左依次增大、向上依次增大。基本思路就是如此,最关键的就是什么时候是转折的时候,比如向右增大到接下来的向下增大转折条件是什么,我没细究所以给外围加了围墙(数组初始化为0,在输入n后在外围全赋值为1)作为判定条件,详细看代码
以下给出代码示例:
#include <stdio.h>//自己写的code
#define N 20
//解决的问题:数字从1开始顺时针填入n行n列数组
int
arrary[N][N]={0};
void
assist(
int
);
void
deal(
int
&,
int
,
int
);
int
main()
{
int
row=1,column=1,i=row,j=column,n;
int
count=0,num=1;
printf
(
"请输入旋转方阵的阶数:"
);
scanf
(
"%d"
,&n);
assist(n);
while
(count!=(n%2==0? n/2:n/2+1))
{
deal(num,row,column);
count++; row++; column++;
}
for
(i=1;i<=n;i++){
for
(j=1;j<=n;j++)
printf
(
"%4d "
,arrary[i][j]);
printf
(
"\n"
);
}
}
void
assist(
int
n)
//外加围墙
{
for
(
int
j=0;j<=n+1;j++)
arrary[0][j]=1;
for
(
int
i=0;i<=n+1;i++)
arrary[i][n+1]=1;
for
(
int
j=n+1;j>=0;j--)
arrary[n+1][j]=1;
for
(
int
i=n+1;i>=0;i--)
arrary[i][0]=1;
}
void
deal(
int
&num,
int
column,
int
row)
{
int
i,j;
i=row;j=column;
for
(j=column;;j++)
//右横
{
if
(arrary[row][j])
break
;
arrary[row][j]=num++;
}column=j-1;
//printf("column:%d\n",column);测试数据时候检测
for
(i=row+1;;i++)
//下
{
if
(arrary[i][column])
break
;
arrary[i][column]=num++;
}row=i-1;
//printf("row:%d\n",row);
for
(j=column-1;;j--)
//左横
{
if
(arrary[row][j])
break
;
arrary[row][j]=num++;
}column=j+1;
// printf("column:%d\n",column);
for
(i=row-1;;i--)
//上
{
if
(arrary[i][column])
break
;
arrary[i][column]=num++;
}row=i-1;
//printf("row:%d\n",row);
}
n阶方阵,数字从1~n^2,顺时针增大的更多相关文章
- 将n阶方阵左下半三角中的元素值置0.
/*===================================== 将n阶方阵左下半三角中的元素值置0. 0<n<10. =========================== ...
- n阶方阵A可逆充分必要条件
n阶方阵A可逆 充分必要条件:<=> A非奇异(非奇异矩阵就是对应的行列式不等于等于0的方阵)<=> |A|≠0 <=> r(A) = n <=> A的 ...
- 求n阶方阵的值(递归)
若有n*n阶行列式A,则: |A|=A[1][1]*M[1][1]+A[1][2]*M[1][2]+...A[1][n]*M[1][n]:其中M[1][i] 表示原矩阵元素A[1][i]的代数余子式: ...
- n阶方阵的最值问题和对角线的和问题
如题! package 矩阵2; public class JuZheng { public static void main(String args[]) { int array[][] = { { ...
- Lua用一维数组存储一个n阶方阵,输出这个方阵的正对角线上的数的和与反对角线上的数的和的差的绝对值。
arr = {, , , , , , , , -} function diagonalDifference(arr) dimesion = math.sqrt(#arr) arr1 = {} sum1 ...
- YTU 3019: 螺旋方阵
3019: 螺旋方阵 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 题目描述 以下是一个5*5阶螺旋方阵.设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进). ...
- Java 实现任意N阶幻方的构造
一.关于单偶数阶幻方和双偶数阶幻方 (一)单偶数阶幻方(即当n=4k+2时) 任何4k+2 阶幻方都可由2k+1阶幻方与2×2方块复合而成,6是此类型的最小阶. 以6阶为例,可由3阶幻方与由0,1,2 ...
- Java 实现奇数阶幻方的构造
一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 publi ...
- Project 3:N级魔方阵
魔方阵:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵.而这个相等的和称为魔术数字.若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵. 目标:输入一 ...
随机推荐
- Activity全屏沉浸状态
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainAc ...
- DataBaseFactory基础了解
<add name="Connection str" connectionString="data source=.;pwd=12;uid=sa;database ...
- php 生成不重复的随机字符串
md5(uniqid(md5(microtime(true)),true))
- UVa 10106 Product 【大数相乘】WA
虽然是错的代码,但是还是想贴出来,最开始WA发现是没有考虑到乘积为0的情况,后来把a*0,0*a,a*0---0(若干个0),0--0(若干个0)*a都考虑进去了:可是还是WA,实在不懂先留在这儿. ...
- 使用ECharts制作图形时,如何设置指定图形颜色?
使用ECharts制作图形时,图形颜色是默认的颜色,有时需求需要指定图形颜色,这就需要自己去设置. 在option下的series属性中设置itemStyle,如下所示: itemStyle: { n ...
- BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络
对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vecto ...
- Day01-04学习内容总结
学习内容小结 1.什么是编程,编程有什么用,什么是编程语言 2.计算的组成原理及组成部分 3.机械硬盘的工作原理 4.什么是操作系统,操作系统做了什么,为什么要有操作系统,操作系统有什么用 5.应用程 ...
- web自动化-selenium2入门讲解(mac版本)
最近要做一个selenium2的分享,于是总结了下我用selenium2的感受,希望分享出来,可以对入门的小伙伴有一点帮助,也希望得到大佬的指教 一,环境搭建maven+selenium2+tes ...
- Android开发新手HelloWorld解析
首先看这个 HelloWorld 类. Java代码public class HelloWorld extends Activity { /** Called when the activ ...
- Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
Struts2,Spring,Hibernate是Java Web开发中最为常见的3种框架,掌握这3种框架是每个Java Web开发人员的基本功. 然而,很多初学者在集成这3个框架的时候,总是会遇到各 ...