由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一道题
相关主题
请问讨论矩阵螺旋打印的链接Agile最核心的几个是?
A家电面找工作找的绝望了
请教G家的一个面试题谈谈自己大半年来找工作的经历和一点感受
L家电面这个rotated sorted array问题
一道关于matrix traversal的面试题请教个题目
南加州的job openning问个OPT的问题
请教一道著名CS面试题:最大黑边正方形community college的工作一般支持办身份吗?
问个问题 求sqrt顶风上来问道题:一个很大char[], 如何in-place 删除重复元素
相关话题的讨论汇总
话题: int话题: endx话题: current话题: repeat话题: startx
进入JobHunting版参与讨论
1 (共1页)
B*M
发帖数: 1340
1
一个大小为n的方形矩阵, 按顺时针的方向打印, 白板coding
比如:
1 2 3
4 5 6
7 8 9
打印顺序: 1 2 3 6 9 8 7 4 5
大家说说思路,多谢!
f*******e
发帖数: 1161
2
控制两个x,y增量,每转一圈重新计算边界条件,
比如n,第一圈n-1,第二圈n-3
应该是这样的吧?

【在 B*M 的大作中提到】
: 一个大小为n的方形矩阵, 按顺时针的方向打印, 白板coding
: 比如:
: 1 2 3
: 4 5 6
: 7 8 9
: 打印顺序: 1 2 3 6 9 8 7 4 5
: 大家说说思路,多谢!

B*M
发帖数: 1340
3
没懂,转角的地方怎么转?

【在 f*******e 的大作中提到】
: 控制两个x,y增量,每转一圈重新计算边界条件,
: 比如n,第一圈n-1,第二圈n-3
: 应该是这样的吧?

f*******e
发帖数: 1161
4
x=1, y=0; -->
x=0, y=1; -->
x=-1,y=0; -->
x=0, y=-1; --> n-=2, repeat

【在 B*M 的大作中提到】
: 没懂,转角的地方怎么转?
f*******e
发帖数: 1161
5
有帮助的话,赏个包子?

【在 f*******e 的大作中提到】
: x=1, y=0; -->
: x=0, y=1; -->
: x=-1,y=0; -->
: x=0, y=-1; --> n-=2, repeat

B*M
发帖数: 1340
6
包子当然可以给,
不过仍然没懂你的思路,

【在 f*******e 的大作中提到】
: 有帮助的话,赏个包子?
D***h
发帖数: 183
7
类似于递归.
i=0开始,
以(i,i)为起点,打印最外面一圈(n)
然后从(i+1,i+1),打印长度为n-2的一圈
直到打印完。

【在 B*M 的大作中提到】
: 一个大小为n的方形矩阵, 按顺时针的方向打印, 白板coding
: 比如:
: 1 2 3
: 4 5 6
: 7 8 9
: 打印顺序: 1 2 3 6 9 8 7 4 5
: 大家说说思路,多谢!

B*M
发帖数: 1340
8
您老的思路基本和我是一样的,
最外一圈转弯儿时候怎么code好些?

【在 D***h 的大作中提到】
: 类似于递归.
: i=0开始,
: 以(i,i)为起点,打印最外面一圈(n)
: 然后从(i+1,i+1),打印长度为n-2的一圈
: 直到打印完。

f*******e
发帖数: 1161
9
多谢包子,又可以赌了,呵呵。。
我再看看,试着写个伪代码?

【在 B*M 的大作中提到】
: 包子当然可以给,
: 不过仍然没懂你的思路,

W***i
发帖数: 9134
10
private int[][] A = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
public void printA()
{
int endX = A.length-1;
int endY = endX;
int startX = 0;
int startY = 0;
while(endX > 0 )
{
for(int i = startX; i <= endX; i++)
{
System.out.print(A[startX][i] + ",");
}
startY++;

for(int i = startY; i <= endY; i++)
{
System.out.print(A[i][endX] + ",");
}
endX--;

相关主题
南加州的job openningAgile最核心的几个是?
请教一道著名CS面试题:最大黑边正方形找工作找的绝望了
问个问题 求sqrt谈谈自己大半年来找工作的经历和一点感受
进入JobHunting版参与讨论
f*******e
发帖数: 1161
11
这个好,不过既然刚才说了,就贴上代码献献丑,也不枉费你的俩包子
void twist_print(int* vec, int n){
static const int dxs[] = {1,0,-1,0};
static const int dys[] = {0,1,0,-1};
int x(0),y(0);
for(int c=n-1;c>0;c-=2){
for(int i(0); i < 4; ++i ){
int dx(dxs[i]), dy(dys[i]);
for(int bd=c;bd>0;--bd){
cout << vec[n*y+x];
x+=dx, y+=dy;
}
}

【在 W***i 的大作中提到】
: private int[][] A = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
: public void printA()
: {
: int endX = A.length-1;
: int endY = endX;
: int startX = 0;
: int startY = 0;
: while(endX > 0 )
: {
: for(int i = startX; i <= endX; i++)

B*M
发帖数: 1340
12
您老这思路和我差不多,
都是写4个for

【在 W***i 的大作中提到】
: private int[][] A = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
: public void printA()
: {
: int endX = A.length-1;
: int endY = endX;
: int startX = 0;
: int startY = 0;
: while(endX > 0 )
: {
: for(int i = startX; i <= endX; i++)

B*M
发帖数: 1340
13
您老这个比较高妙一些,
不必写4个for,
最后那个print中点的是啥意思?

【在 f*******e 的大作中提到】
: 这个好,不过既然刚才说了,就贴上代码献献丑,也不枉费你的俩包子
: void twist_print(int* vec, int n){
: static const int dxs[] = {1,0,-1,0};
: static const int dys[] = {0,1,0,-1};
: int x(0),y(0);
: for(int c=n-1;c>0;c-=2){
: for(int i(0); i < 4; ++i ){
: int dx(dxs[i]), dy(dys[i]);
: for(int bd=c;bd>0;--bd){
: cout << vec[n*y+x];

W***i
发帖数: 9134
14
他写的我也没看到, 不过也有3个for

【在 B*M 的大作中提到】
: 您老这个比较高妙一些,
: 不必写4个for,
: 最后那个print中点的是啥意思?

B*M
发帖数: 1340
15
while(endX>0)??
是这样么?

【在 W***i 的大作中提到】
: private int[][] A = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
: public void printA()
: {
: int endX = A.length-1;
: int endY = endX;
: int startX = 0;
: int startY = 0;
: while(endX > 0 )
: {
: for(int i = startX; i <= endX; i++)

f*******e
发帖数: 1161
16
n是奇数的时候,中间那个点正好是c=0,所以就另外打印一下
思路都查不多,实现细节略有不同而已

【在 B*M 的大作中提到】
: 您老这个比较高妙一些,
: 不必写4个for,
: 最后那个print中点的是啥意思?

B*M
发帖数: 1340
17
嗯,他的代码难懂,
估计也是对的,看他的代码很转的样子,

【在 W***i 的大作中提到】
: 他写的我也没看到, 不过也有3个for
f*******e
发帖数: 1161
18
我就喜欢写别人懂不了的代码,哈哈。。
思路应该跟wensi是一样的

【在 B*M 的大作中提到】
: 嗯,他的代码难懂,
: 估计也是对的,看他的代码很转的样子,

B*M
发帖数: 1340
19
好的,多谢几位,

【在 f*******e 的大作中提到】
: 我就喜欢写别人懂不了的代码,哈哈。。
: 思路应该跟wensi是一样的

W***i
发帖数: 9134
20
是啊, 代码运行过, 我觉得4个for大概可以合并成一个,至少可以合并成2个,或者
写个子函数。。。

【在 B*M 的大作中提到】
: while(endX>0)??
: 是这样么?

j**l
发帖数: 2911
21
三种方法。
方法一,直感式思考,从左上角水平向右吭哧吭哧走,碰壁,哐铛停下来。改竖直方向
,因为向上越界,只能向下,继续吭哧吭哧向下走走,再次碰壁,停下来后水平从右向
左走...
原则,不能越界,访问过的元素作标记后也不能越过。碰壁后水平改竖直,竖直改水平
,只要能走,必只有一个方向可走,直到最后无路可走的时候终止。
方法二,穷举四个分段路径走完外一圈,改变参数(比如下次每段的长度比上次减少2)
,继续迭代走内一圈。
方法三,同方法二,走完最外一圈后用递归取代迭代。
s*******s
发帖数: 27
22
一层循环实现方法,缺点是MoveNext比较复杂一点---条件比较多。
void PrintSquareArray(int n, int* A)
{
int origin_x = 0;
int origin_y = 0;
int current_size = n;
int current_x = 0;
int current_y = 0;
do
{
printf("%d (%d)\n", A[current_x*n + current_y], current_size);

}while(MoveNext(origin_x, origin_y, current_size, current_x,
current_y));
}
bool MoveNext(int &origin_x, int &origin_y, int &square_size, int
¤t_x
, int ¤t_y)
{
int x = current_x - or
1 (共1页)
进入JobHunting版参与讨论
相关主题
顶风上来问道题:一个很大char[], 如何in-place 删除重复元素一道关于matrix traversal的面试题
the shortest code to crash your system南加州的job openning
CLRS上的红黑树题 13.3-6请教一道著名CS面试题:最大黑边正方形
有人听说过FIS GT.M吗?上面经问个问题 求sqrt
请问讨论矩阵螺旋打印的链接Agile最核心的几个是?
A家电面找工作找的绝望了
请教G家的一个面试题谈谈自己大半年来找工作的经历和一点感受
L家电面这个rotated sorted array问题
相关话题的讨论汇总
话题: int话题: endx话题: current话题: repeat话题: startx