直接写屏的方法输出有规律的数字方阵
2007-08-26 12:21
225 查看
/*
有许多算法问题是关于数字方阵的,多数通用的算法是计算规律和数据并排着输出
而本例是用直接写屏方法输出,它的方法不再是计算数据与规律,而是计算数据位置,"跳"着输出数据
最近很忙,因此算法思想就不写了,大家自己领悟:)
以下是用直接写屏的方法输出有规律的数字方阵的一些例子
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();
}
有许多算法问题是关于数字方阵的,多数通用的算法是计算规律和数据并排着输出
而本例是用直接写屏方法输出,它的方法不再是计算数据与规律,而是计算数据位置,"跳"着输出数据
最近很忙,因此算法思想就不写了,大家自己领悟:)
以下是用直接写屏的方法输出有规律的数字方阵的一些例子
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();
}
相关文章推荐
- struts2中格式化输出数字和日期、截取小数点后两位数的方法
- Python 字符串与数字输出方法
- Ajax中post方法直接返回以0开头数字出错问题分析
- struts2中格式化输出数字和日期、截取小数点后两位数的方法
- 修改Number类,增加将数字转换为人民币大写输出方法
- JavaScript实现按照指定长度为数字前面补零输出的方法
- struts2中格式化输出数字和日期的方法
- MVC中html转义问题(直接输出html的方法)
- Web页面输出Excel的数字问题解决方法
- dedecms按栏目名首字母/数字排序输出的实现方法
- java梳理-给一个字符串类型的数字,不调用java直接转的API写一个方法转换出来
- 使用SQl方法把多行字符直接转换成相应的表输出
- 编写一个类的方法,其输入参数为一个整数,输出为该整数各个位上的最大数字
- java中格式化输出数字的方法
- java 格式化输出数字的方法
- js输出数字用千分号分隔的三种方法
- 【Ajax】代理直接输出JSON或者XML的解决方法
- PowerShell中直接输出转义字符或变量名称的方法
- 找出升序数组中和为给定值的两个数字 不要直接用形参里的表示,输出或清零输入时都是大忌
- C#数字类型输出字符串时保留指定小数位数的方法