注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

笔试题  

2011-11-05 12:34:51|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

有个同事跟我说了一下这个公司,昨天晚上下班之后,跑去搞个面试,公司在一个什么酒店公寓的一层,晚上过去找了半天,还真有点难找啊,人家面试官等了好久,有点不好意思。面谈还一般般啦,问了一下Linux内核的网络方面的,没问那些算法那些。这个笔试题啊,没看到有这么怪的!乱七八糟的技巧,我记得的几道是这样的

malloc 和calloc有什么区别,这个我还真不知道,很少写应用程序没怎么用过calloc,回来查了一下calloc是分配内存之后用0填充的,像内核里面的kmalloc 和kzalloc 的区别吧。 我猜大概就这么一回事,但不知道calloc 的c是怎么来的,就写个不知道在那里了。

还有一道strcpy  memcpy有什么区别,我晕这个还能回答的上来。

还有一个 常量指针和指针常量,搞了4中写法,叫指出不同的地方,我也不知道答对了没有笔试题 - widebright - widebright的个人空间

反正很多类似这种题,没有一个涉及算法什么的,不知道设计这题的人怎么想的?

还有30分钟做两道题目,在记事本里面,不能调试,也没有笔画一下图示什么的

一道是链表逆序,还有一道就是下面这个,根据输入的维数打印出这样一个矩阵,笔试很习惯笔记本+记事本的组合,30分钟我第一道以前见过思考过,第二道应该是没写完,这种鬼东西随便搞一下边界都要你想半天了,不知道出这题目的人要达到什么目的,估计我不是他们要找的人吧。

笔试题 - widebright - widebright的个人空间

 

回来大概做了一下,也要花了不少时间!

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <stdlib.h>

void print_matrix(int matrix[],int d)
{
     int i;
     for ( i =0; i< d*d; i++ ) {
      if (i % d ==0) {
          printf("\n");
      }
         //printf("\t%d",matrix[i]);  
      printf("%d",matrix[i]);
     }
     printf("\n--------------------------------------------------\n"); 

}


int in_matrix(  int d, int i,  int j)
{
 if (i <0 || i>=d || j< 0 || j>=d) {
      return 0;
 } else {
      return 1;
 }
}

int get_next_ij( int d, int *i, int *j, int *flag)
{
 if (*flag ==0 ) {  //从上到下斜线填充
  if ( in_matrix(d, (*i) -1, (*j) + 1)) {
      *i = (*i) -1;
            *j = ( *j) + 1;           
  } else {
      *flag =1;
   if (in_matrix(d, (*i), (*j) + 1)) {   //优先下方向
                  *j = (*j) + 1;  
   } else if (in_matrix(d, (*i) + 1, *j)){ //然后右方向
          *i = (*i) + 1;
   } else {
       //printf("不可预知错误!\n");
    //exit(1);
    return 0;
   }

  }  
 } else { //从下到上斜线填充
  if ( in_matrix(d, (*i) +1, (*j) - 1)) {
      *i = (*i) +1;
            *j = ( *j) - 1;           
  } else {
      *flag =0;
   if (in_matrix(d, (*i) + 1, *j)){ //优先右方向
          *i = (*i) + 1;
   } else if (in_matrix(d, (*i), (*j) + 1)) {//然后优先下方向
                  *j = (*j) + 1;  
   }else {
       //printf("不可预知错误!\n");
    //exit(1);
    return 0;
   } 

  }
 }

 return 1;
}


int * get_matrix( int d)
{
     int  * matrix = (int *)malloc( d * d * sizeof (int));
  int num ;
  int i = 0, j = 0;
  int flag = 0;    //填充方向。0从上往下填充

     for ( num =1; num<= d *d; num++ ) {    
    matrix[j*d +i] = num;
    if (0 == get_next_ij(d, &i,&j,&flag)){
       break;  //最后一个元素已经填充完了
    } 
    //printf("\ni=%d, j=%d\n",i,j);
    //print_matrix(matrix,d);
  }

  return matrix;
}


int _tmain(int argc, _TCHAR* argv[])
{
 int a=0;
 do {
  printf("\n请输入矩阵/数组维数:");
        scanf("%d", &a);
  if (a> 0) {
     int * matrix = get_matrix(a);
           print_matrix(matrix,a);
     free(matrix);
  }
 }while (a != 0);
 return 0;
}

  评论这张
 
阅读(893)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017