笔试题集锦(2)

1  下面代码有哪些错误?(台湾某公司0512月笔试题)

#include  < iostream >
using   namespace  std;

int  main()
{
    
int &t1;
    
int *pi;
    
*pi = 3;
    
const double dt;
    cout
<<pi<<endl;
    
return 0;
}

答案

2下面是一个蛇型矩阵

21  22  23。。。

20  7   8  9  10

19  6   1  2  11

18  5   4  3  12

17 16  15 14  13


1点的坐标为(00),X方向向右为正,y方向向下为正,如:7的坐标为(-1-1),2的坐标为(01),编程实现输入任意一坐标(x,y,输出所对应的数.(诺基亚05年笔试题).

#include  < iostream >
#include 
< cstdlib >
#include 
< algorithm >

using   namespace  std;

const   int  N  =   100 ;

int  data[N  +   1 ][N  +   1 ];

enum  DIRECTION
{
    RIGHT, DOWN , LEFT, UP
}
;

// 模拟整个过程
void  Simulate( int  n)
{
    
int x, y;
    x 
= y = (n - 1/ 2//1的位置
    data[x][y] = 1;
    
int len = 1;
    
int count = 0;
    
int num = 2;
    DIRECTION dir 
= RIGHT;
    
while(num  <= n * n)
    
{
        
for(int i = 0; i < len; i++)
        
{
            
switch(dir)
            
{
            
case LEFT:
                
--y;    break;
            
case RIGHT:
                
++y;     break;
            
case UP:
                
--x;    break;
            
case DOWN:
                
++x;    break;
            
default:    break;
            }

            data[x][y] 
= num++;
        }

        count
++;
        
if(count == 2)
        
{
            count 
= 0;
            len
++;    
        }

        dir 
= (DIRECTION)((dir + 1% 4);
    }

}


// 打印螺旋矩阵
void  Output( int  n)
{
    
int i, j;
    
for(i = 0; i < n; i++)
    
{
        cout 
<< data[i][0];
        
for(j = 1; j < n; j++)
            cout 
<< "/t" << data[i][j];
        cout 
<< endl;
    }

}


// 以(1,1)所在位置作为原点,向右作为x正半轴,向下作为y正半轴
int  GetValue( int  x,  int  y)
{
    
int m = max(abs(x), abs(y));
    
int rightBottom = m * m * 4 - 2 * m + 1;
    
int value = 0;
    
if(x == -m)
    
{
        value 
= rightBottom + 2 * m + m - y;
    }

    
else if( y == m)
    
{
        value 
= rightBottom + m - x;
    }

    
else if(y == -m)
    
{
        value 
= rightBottom + 4 * m + x + m;
    }

    
else if( x == m )
    
{
        value 
= rightBottom - (m - y);
    }

    

    
return value;
}


void  TestPos( int  n)
{
    
int i, j;
    
for(i = 0; i < n; i++)
    
{
        cout 
<< GetValue(0 - (n - 1/ 2, i - (n - 1/ 2);
        
for(j = 1; j < n; j++)
            cout 
<< "/t" << GetValue(j - (n - 1/ 2, i - (n - 1/ 2);
        cout 
<< endl;
    }

}


int  main()
{
    
int n;
    
while(cin >> n)
    
{
        
if(n <= 0 || n > 100)
        
{
            cerr 
<< "Size error!" << endl;
            
break;
        }

        
else
        
{
            Simulate(n);
            Output(n);
            cout 
<< "*******************" << endl;
            TestPos(n);
        }

    }


    
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值