贡献螺旋队列实现源码(一道笔试题)

本文介绍了一个基于坐标输入返回对应螺旋矩阵数值的C语言程序。该程序通过定义的坐标系,利用数学逻辑实现了坐标与特定数值之间的映射。用户可以输入坐标值,程序将输出该坐标对应的螺旋矩阵中的数值。

题目描述:
21 22。。。
20 07 08 09 10
19 06 01 02 11
18 05 04 03 12
17 16 15 14 13

仔细观察上述数字排列规律,设01点的坐标是(0,0),x方向向右为正,y方向向下为正。例如,07坐标为(-1,-1),2的坐标为(1,0),3的坐标为(1,1)。编程实现输入任意一点坐标(x,y),输出对应的数字。


#include <stdio.h>

#define max(a,b) ((a)<(b)?(b):(a))
#define abs(a) ((a)>0?(a):(-a))

int func_queue(int x, int y);

//螺旋队列
int main()
{
 int x;
 int y;

 while(1)
 {
  printf("please input x:");
  scanf("%d", &x);
  printf("please input y:");
  scanf("%d", &y);

  printf("result:%d/n", func_queue(x, y));
  printf("enter ctrl+c to quit!/n");
 }

 return 1;
}

int func_queue (int x, int y)
{
 if ((0 == x) && (0 == y))
  return 1;
 
 int Num = 0;
 int maxabsXY = max(abs((x)), abs((y)));
 int BaseNum = (maxabsXY*2 - 1) * (maxabsXY*2 - 1);

 for (int i=-(maxabsXY-1); i<=maxabsXY; i++)
 {
  Num ++;
  if ( (maxabsXY == x) && (i == y) )
   return BaseNum + Num;
 }

 for (i=maxabsXY-1; i>=-maxabsXY; i--)
 {
  Num ++;
  if ( (i == x) && (maxabsXY == y) )
   return BaseNum + Num;
 }

 for (i=maxabsXY-1; i>=-maxabsXY; i--)
 {
  Num ++;
  if ( (-maxabsXY == x) && (i == y) )
   return BaseNum + Num;
 }

 for (i=-(maxabsXY-1); i<=maxabsXY; i++)
 {
  Num ++;
  if ( (i == x) && (-maxabsXY == y) )
   return BaseNum + Num;
 }

 return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值