标题:[原创]直接写屏的方法输出有规律的数字方阵
只看楼主
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
结帖率:100%
 问题点数:0 回复次数:1 
[原创]直接写屏的方法输出有规律的数字方阵

/*
有许多算法问题是关于数字方阵的,多数通用的算法是计算规律和数据并排着输出
而本例是用直接写屏方法输出,它的方法不再是计算数据与规律,而是计算数据位置,"跳"着输出数据

最近很忙,因此算法思想就不写了,大家自己领悟:)

以下是用直接写屏的方法输出有规律的数字方阵的一些例子
Write By S.K
*/

/* 写屏添数法 一
输出字轮转组成一正方形,已n作为边长,比如:

n=4:
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7

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

/*Write By S.K*/
#include"stdio.h"
int main(void)
{
int n,i,k,s=0,z=1,x=1,y=1;
scanf("%d",&n);
for(i=0;i<2*n-1;i++)
{
for(k=0;k<n-1-s;k++)
{
gotoxy(x*3,y);
printf("%d",z);
z++;
switch(i%4)
{
case 0: y++; break;
case 1: x++; break;
case 2: y--; break;
case 3: x--;
}
}
if(i%4==3) { x++; y++; s+=2;}
}
gotoxy(x*3,y);
printf("%d",z);
getch();
}

/*写屏添数法 二
写屏输出如下数字排列:
n=3:
1 2 6
3 5 7
4 8 9
n=4:
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
n=5:
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
n=6:
1 2 6 7 15 16
3 5 8 14 17 26
4 9 13 18 25 27
10 12 19 24 28 33
11 20 23 29 32 34
21 22 30 31 35 36

.......

读入n,输出数字方阵
*/

/*Write By S.K*/
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,i,k,w=1,v=1,t=1,e=1,f;
scanf("%d",&n);
f=n;
n=n*n/2;
for(i=1;i<=f;i++)
{
if(e>n) break;
(i%2) ? w=1,v=t : (w=t,v=1);
for(k=1;k<=t;k++)
{
gotoxy(w*3,v);
printf("%d",e);
gotoxy((f-w+1)*3,f-v+1);
printf("%d",n*2-e+1+f%2);
e++;
if(e>n) break;
(i%2) ? w++,v-- : (w--,v++);
}
t++;
}
if(f%2)
{
gotoxy((f/2+1)*3,f/2+1);
printf("%d",n+1);
}
getch();
}

搜索更多相关主题的帖子: 方阵 数字 规律 输出 
2007-04-27 12:35
anzi520
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-9-24
得分:0 
学习了!
2009-10-27 21:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-135360-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.195930 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved