打印陀螺形数字

用户输入n,编写程序通过二维数组打印如下所示陀螺形数字(以n=6为例)


   1   20   19   18   17   16

   2   21   32   31   30   15

   3   22   33   36   29   14

   4   23   34   35   28   13

   5   24   25   26   27   12

   6    7    8     9    10   11

 

/* 打印陀螺形数字*/
/* 通过控制二维数组下标,将1~n*n存入二维数组,并输出之*/
/* 二维数组下标变化:最初 i 由0->n-1,j 由0->n-1;然后i 由n-1->0,j 由n-1->1。此时已得到陀螺的最外层*/
/* 设置第二层的起始s、终止t,将  i 由s->t,j 由s->t;然后i 由t->s,j 由t->s+1。此时已得到陀螺的第二层*/
/* 循环上述步骤 */
#include <stdio.h>
#include <conio.h>

#define N 100     /* creat an array large enough */

int n,i,j,a[N][N];

input()       /* 函数功能:读取所输入的数据,如果n大于某特定值重新输入*/
{
 puts("Please input n:");

 scanf("%d",&n);

 while (n>N)
 { 
  puts("Please input a smaller number");
  scanf("%d",&n);
 }
}

output()      /* 函数功能:输出二维数组,按任意键结束*/
{
 printf("................top of %d.................../n/n",n);

 for (i=0;i<n;i++ )
 { 
  for (j=0;j<n ;j++ )
   printf("%4d",a[i][j]);
 
  printf("/n/n");
 }

 printf("............................................/n");

 puts("press anykey to quit.");

 getch();
}


int main(void)

{int s,t,k;

 input();

 s=0;t=n-1;i=j=0;

 for (k=0;k<=n*n-1&&s<=t;k++)
 {
  a[i][j]=k+1;

 if (i<t&&j==s) {i++;continue;}

 if (i==t&&j<t) {j++;continue;}

 if (i>s&&j==t) {i--;continue;}

 if (i==s&&j>s+1) {j--;if(!(j==i+1)) continue;}

 s++;t--;
 }

clrscr();
output();
return(0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值