文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>【转】厦门某公司的某道笔试题

【转】厦门某公司的某道笔试题

时间:2011-01-24  来源:梧桐栖凤

有一组N*N的数据,外层是X,第二层是Y,第三层是0,接着是1,2,3......N-1,N
比如输入5,打印出:
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X

输入7则打印:
X X X X X X X
X Y Y Y Y Y X
X Y 0 0 0 Y X
X Y 0 1 0 Y X
X Y 0 0 0 Y X
X Y Y Y Y Y X
X X X X X X X

 

由于感冒,思想不集中,写错了 - -b,今天跟低手兄弟说了下,他居然说了一个特别WS的想法....大意是这样: 将数组每次往内缩短填充.

嘿嘿果然好WS啊~~~贴下低手的思想,实现 by Root

///////////////////////////////////华丽的分割线///////////////////////////////////

#include <cstdlib>
#include <iostream>
using namespace std;


// 打印结果函数
void PrintResult( char** pResult, int nArrSize );

// 分配多维数组
char** MallocArray( int nSize );

// 释放分配的数组
void FreeArray( char** p, int nSize );

// 填充字符
void FillChar( char** p, int N, int nIndex, char ch );


//////////////////////////////////////////////////////////////////////////
// 低手兄弟的想法版本, code by Root
//////////////////////////////////////////////////////////////////////////
int main(void)
{
    int N;

    cout << "请输入N的值: ";
    cin >> N;

    // 分配多维数组
    char** pszResult = MallocArray( N );

    // 计算中心位置
    int nCenter = N / 2 + N % 2;

    // 记录增值
    char chCount = '0';
    for ( int nIndex = 0; nIndex < nCenter; nIndex++ )
    {
        // 填充X
        if ( nIndex == 0 )
        {
            FillChar( pszResult, N, nIndex, 'X' );
            continue;
        }
        // 填充Y
        else if ( nIndex == 1 )
        {
            FillChar( pszResult, N, nIndex, 'Y' );
            continue;
        }

        // 填充增值,并增加
        FillChar( pszResult, N, nIndex, chCount++ );
    }

    // 打印结果
    PrintResult( pszResult, N );

    FreeArray( pszResult, N );
    return 0;
}


// 打印结果函数
void PrintResult( char** pResult, int nArrSize )
{
    for ( int i = 0; i < nArrSize; i++ )
    {
        for ( int j = 0; j < nArrSize; j++ )
        {
            cout << pResult[i][j] << " ";
        }

        // 回车
        cout << endl;
    }

    cout << "Print End..." << endl;
}

// 分配多维数组
char** MallocArray( int nSize )
{
    char **pResult = (char**)malloc( nSize * sizeof(char*) );

    for(int nCol = 0; nCol < nSize; nCol++)
    {
        pResult[nCol] = (char*)malloc(nSize * sizeof(char));
    }

    return pResult;
}


// 释放分配的数组
void FreeArray( char** pArr, int nSize )
{
    for ( int nCol = 0; nCol < nSize; nCol++ )
    {
        free( pArr[nCol] );
    }

    free( pArr );
}



// 填充字符
void FillChar( char** p, int N, int nIndex, char ch )
{

    // 遍历整个数组,并填充数据
    for ( int nCol = nIndex; nCol < N - nIndex; nCol++ )
    {
        for ( int nRow = nIndex; nRow < N - nIndex; nRow++ )
        {
            p[nCol][nRow] = ch;
        }
    }
}

 

 ///////////////////////////////////华丽的分割线///////////////////////////////////

话说那公司最吸引俺的地方就是那台咖啡机...

当然,这不是最优解,只是贴下低手兄弟WS的想法..哈哈,如果各位看官有更WS的想法欢迎贴出来分享分享,告诉下小弟,,谢谢

贴下结果图:

// 函数优化版,提升N个档次的性能

// 填充字符
void FillChar( char** p, int N, int nIndex, char ch )
{
    // 对付中间值,以免对中间值进行4次赋值操作
    if ( N % 2 == 1 )
    {
        int nCenter = N / 2 + N % 2;
        if ( nCenter - 1 == nIndex )
        {
            p[nIndex][nIndex] = ch;
            return;
        }
    }

    for ( int nCol = nIndex; nCol < N - nIndex; nCol++ )
    {
        // 填充横行范围(上)
        p[nIndex][nCol] = ch;
        // 填充竖行(左)
        p[nCol][nIndex] = ch;
        // 右方
        p[N - nIndex - 1][nCol] = ch;
        // 下方
        p[nCol][N - nIndex - 1] = ch;
   }

}

文章来源:http://hi.baidu.com/cppcoffee/blog

相关阅读 更多 +
排行榜 更多 +
三角符文第一章下载

三角符文第一章下载

角色扮演 下载
嘀嘀动画官方正版下载

嘀嘀动画官方正版下载

趣味娱乐 下载
像素世界僵尸危机安卓版

像素世界僵尸危机安卓版

飞行射击 下载