面试题,有点难,求高手

zzyjsjcom 2009-01-15 02:49:37
加精
面试题,有点难,求高手

螺旋数字队列

21 22 ……
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13


看清上述数字的规律
以数字1为原点,X轴向右为正,y轴向上为正,建立数轴
那么数字2的坐标为(1,0),数字9的坐标为(1,1),数字5的坐标为(-1,-1)
现在编程实现输入一点(x,y),输出这点在数轴上对应的值
...全文
7103 205 打赏 收藏 转发到动态 举报
写回复
用AI写文章
205 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jadenmai 2012-07-13
  • 打赏
  • 举报
回复
补充一句,关于上面的代码,有不懂的,可以私下交流。欢迎互相学习!(QQ:949079968 非诚勿扰)
Jadenmai 2012-07-13
  • 打赏
  • 举报
回复
用数学方法解决吧,循规蹈矩有点没意思,那就的确有点难度:

#include<stdio.h>
#include<stdlib.h>

#define OnAxle(n, b) (4 * n * n + 1 + n * (b))

int main() {
int n, m, x, y, ans, m_val;
printf("please input an integer n: ");

scanf("%d", &n);
m = n >> 1;

for(x = -m; x <= m; ++x) {
for(y = -m; y <= m; ++y) {
m_val = abs(x) > abs(y) ? abs(x) : abs(y);
if(m_val == abs(y)) {
ans = y > 0 ? OnAxle(m_val, 3) + x : OnAxle(m_val, -1) - x;
} else {
ans = x < 0 ? OnAxle(m_val, 1) + y : OnAxle(m_val, -3) - y;
}
printf("%4d ", ans);
}
printf("\n");
}
return 0;
}

atj_17 2012-07-13
  • 打赏
  • 举报
回复
一个是关联坐标。。。一个是关联数值
用array应该可以实现的
interim2012 2012-02-16
  • 打赏
  • 举报
回复
不懂。。。
hejiaobiye 2012-02-10
  • 打赏
  • 举报
回复
看到就头晕,呵呵。
lostinginto 2011-10-21
  • 打赏
  • 举报
回复
不好意思刚才断网了
lostinginto 2011-10-21
  • 打赏
  • 举报
回复
看来大家的数学不是很好
#include<stdio.h>
#define ABS(x) ((x)>0?(x):-(x))
void main()
{
long int sn;
int m,x,y,k1,k2;
printf("input one number:");
scanf("%d,%d",&x,&y);
m=ABS(x)>ABS(y)?ABS(x):ABS(y);
k1=2*m-1;
k2=2*m+1;
if(y<x)
sn=k1*k1+ABS(x-m)+ABS(y-m);
else
sn=k2*k2-ABS(x-m)-ABS(y-m);
printf("%ld\n",sn);
}
lostinginto 2011-10-21
  • 打赏
  • 举报
回复
看来大家的数学不是很好。
#include<stdio.h>
#define ABS(x) ((x)>0?(x):-(x))
long int helix(int x,int y)
{
long int sn;
int m,k1,k2;
m=ABS(x)>ABS(y)?ABS(x):ABS(y);
k1=2*m-1;
k2=2*m+1;
if(y<x)
sn=k1*k1+ABS(x-m)+ABS(y-m);
else
sn=k2*k2-ABS(x-m)-ABS(y-m);
return sn;
}
void main()
{
long int n;
int x,y;
printf("input one number:");
scanf("%d,%d",&x,&y);
n=helix(x,y);
printf("%ld",n);
}
随风Marz 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 waizqfor 的回复:]
这是老面试题了 现在还有啊? 出自《程序员面试宝典》

C/C++ code

#include <iostream>
using namespace std;

int abs(int x){
if(x>0)
return x;
else
return -x;
}


int getNu……
[/Quote]推荐的是好资料啊!
yanyu062622 2011-07-20
  • 打赏
  • 举报
回复
路过;
Tom_殇子 2011-07-17
  • 打赏
  • 举报
回复
我还没有学到数组这里来哦!有答案我也看不懂!郁闷哦!哎!
C_MG_Sai 2011-07-13
  • 打赏
  • 举报
回复
混点分,要不怎么下载啊?
千杯不醉-sen 2010-10-02
  • 打赏
  • 举报
回复
我前几天刚研究的:

#include <stdio.h>
#define M 50 //控制方向

void main()
{
int i,j,n,count;
int dada[M][M] = {0};
printf("Input n(0~%d):",M);
scanf("%d",&n);
count = n*n;
for(i=0;i<(n+1)/2;i++)
{
for (j=i;j<n-i;j++)
{
dada[i][j] = count--;
}
for (j=i+1;j<n-i;j++)
{
dada[j][n-i-1] = count--;
}
for (j=n-i-2;j>=i;j--)
{
dada[n-i-1][j] = count--;
}
for (j=n-i-2;j>i;j--)
{
dada[j][i] = count--;
}
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
printf("%5d",dada[i][j]);
}
printf("\n\n");
}
}
Input n(0~50):10
100 99 98 97 96 95 94 93 92 91

65 64 63 62 61 60 59 58 57 90

66 37 36 35 34 33 32 31 56 89

67 38 17 16 15 14 13 30 55 88

68 39 18 5 4 3 12 29 54 87

69 40 19 6 1 2 11 28 53 86

70 41 20 7 8 9 10 27 52 85

71 42 21 22 23 24 25 26 51 84

72 43 44 45 46 47 48 49 50 83

73 74 75 76 77 78 79 80 81 82
darren_guo 2010-09-16
  • 打赏
  • 举报
回复
我也回帖
liyuxia713 2010-09-02
  • 打赏
  • 举报
回复

#include <cmath> //abs
#include <iomanip> //setw

using namespace std;

int luoXuanQueue(int x,int y)
{
int n = abs(x) > abs(y) ? abs(x) : abs(y);
int layer = 2*n - 1;

if( (x+y)>0 )
{
return (layer*layer)+layer+(y-x)+1;
}
else
{
layer++;
return (layer*layer)+layer+(x-y)+1;
}
}

int main()
{
for(int i = -2; i < 3; i++)
{
for(int j = -2; j < 3; j++)
{
cout << setw(3) << luoXuanQueue(j,i);
}
cout << endl;
}
return 0;
}
LOVE_JUAN214 2010-09-02
  • 打赏
  • 举报
回复
还没学习过算法呢。。。。
cs8728205 2010-06-17
  • 打赏
  • 举报
回复
up~!
wujiaxuand 2010-06-17
  • 打赏
  • 举报
回复
有意思啊
a250871207 2010-06-11
  • 打赏
  • 举报
回复
这算什么 考察观察与总结能力么 表示怀疑
mlkakon 2010-05-30
  • 打赏
  • 举报
回复
MARK 用空看下那书
加载更多回复(185)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧