直接写屏的方法输出有规律的数字方阵

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

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

以下是用直接写屏的方法输出有规律的数字方阵的一些例子
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();
}

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值