您的位置:首页 > 其它

[算法 笔记]2014年 去哪儿网 开发笔试题

2013-09-11 09:02 369 查看
1. 将绝对路径转换成相对路径。例如, input: /home/news/../tmp/game/../; ouptut: /home/tmp/

  思路:利用栈的思想。每次遇到".."时,将退栈至上一个'/'位置。

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

void gobang_problem( int colors[][10], int size_i )
{
int i, j, k, p,
colors_cnt = 0;

/**< check argument. */
if ( NULL == colors || size_i <= 0 )
{
fprintf( stderr, "gobang_problem: invalid argument.\n" );
return;
}

/**< compute */
for ( i = 0; i < size_i; ++i )
{
for ( j = 0; j < size_i; ++j )
{
/**< 纵向 */
for ( colors_cnt = 0, k = j; k < size_i; ++k )
{
if ( colors[i][j] == colors[i][k] )
{
colors_cnt++;
/**< if found, output. */
if ( colors_cnt == 5 )
{
while ( k >= j )
{
printf( " %d %d,", i, k-- );
}

return;
}
}
else
{
break; /**< if not same, do not need to continue. */
}
}

/**< 横向 */
for ( colors_cnt = 0, k = i; k < size_i; ++k )
{
if ( colors[i][j] == colors[k][j] )
{
colors_cnt++;
if ( colors_cnt == 5 )
{
while ( k >= i )
{
printf( " %d %d,", k--, j );
}

return;
}

}
else
{
break;
}
}

/**< 向下斜向 */
for ( colors_cnt = 0, k = i, p = j;
k < size_i && p < size_i; ++k, ++p )
{
if ( colors[i][j] == colors[k][p] )
{
colors_cnt++;
if ( colors_cnt == 5 )
{
while ( k >= i && p >= j )
{
printf( " %d %d,", k--, p-- );
}

return;
}

} // end if
else
{
break;
}
}// end for
} // end for
} // end for

/**< 向上斜向 */
for ( i = size_i - 1; i >= 0; --i )
{
for ( j = 0; j < size_i; ++j )
{
for ( colors_cnt = 0, k = i, p = j;
k >= 0 && p < size_i;
--k, ++p )
{
if ( colors[i][j] == colors[k][p] )
{
colors_cnt++;
if ( colors_cnt == 5 )
{
while ( k <= i && p >= j )
{
printf( " %d %d,", k++, p-- );
}

return;
}

}
else
{
break;
}
} // end for
}
}
}

void generate_chessboard( int chessboard[][10], int size_i )
{
int i, j;

/**< check argument */
if ( NULL == chessboard || size_i <= 0 )
{
fprintf( stderr, "generate_chessboard: invalid argument.\n" );
return;
}

/**< generating */
srand( (unsigned) time(0) );
for ( i = 0; i < size_i; ++i )
{
for ( j = 0; j < size_i; ++j )
{
chessboard[i][j] = rand() % 4;
}
}

/**< output chessboard */
printf( "\nThis color in chessboard is \n" );
for ( i = 0; i < size_i; ++i )
{
for ( j = 0; j < size_i; ++j )
{
printf( " %d", chessboard[i][j] );
}
printf( "\n" );
}
}

int main()
{
int chessboard[10][10];
int size_i = 10;

generate_chessboard( chessboard, size_i );
printf( "\nFive colors in low:\n" );
gobang_problem( chessboard, size_i );

return 0;
}


View Code

 [b] 欢迎大家指导!![/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐