Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4826311
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2009-10-08 14:37:12

   今天又从当当购买了一本书 Network Security Secret & Solutions Hacking Exposed,拿到有点小失望,好好的书被整成花销的不行。边和朋友聊天边做了做网易有道的题目,感觉还行,跟baidu比还是小儿科了点,一会就搞完了!!!随让我是用脚盆洗脸的盆盆呢^_^.废话了这么多,看题了
 
1 打印如下形式的矩阵; 
n=5:
1   2   9 10 25
4   3   8 11 24
5   6   7 12 23
16 15 14 13 22
17 18 19 20 21

n=6:
1   2   9 10 25 26
4   3   8 11 24 27
5   6   7 12 23 28
16 15 14 13 22 29
17 18 19 20 21 30
36 35 34 33 32 31
 
  刚开始想往螺旋队列以及奇幻矩阵上靠,结果发现此路不通,那就自己分析了哦!!
    1  2  9  10  25
       3  8  11  24
          7  12  23
             13  22
                 21
  这不就是规律,1 = 1*1+1-1
             2 = (2-1)*(2-1)+1;
             9 = 3*3+1-1
             10 = (4-1)*(4-1)+1; 
             25 = 5*5+1-1
     好了我是懒人自己去分析了,思路如此
   j>=i的时候:
     j为偶数 (j-1)*(j-1)+i;
     j为奇数 j*j+1-i;
 
   j
     发现时关于行有规律了
      i为偶数 i*i+1-j;
      i为奇数 (i-1)*(i-1)+j;
     
  程序:
  

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

void printMatrix(int N)
{
  int i =1;
  int j = 1;
   
  for(;i<=N;++i)
  {
  for(j=1;j<=N;++j)
   {
    if(i<=j)
    {
      if(j%2)
        printf("%d\t",(j-1)*(j-1)+2*j-i);
      else
        printf("%d\t",(j-1)*(j-1)+i);
    }
   else
    {
     if(i%2)
       printf("%d\t",(i-1)*(i-1)+j);
     else
       printf("%d\t",(i-1)*(i-1)+2*i-j);
    }
   }
  printf("\n");
 }
}

int main(int argc, char *argv[])
{
  printMatrix(5);
  system("PAUSE");    
  return 0;
}

 

 

2. 表达式求值,一个字符串只由'+','-',和‘0’-‘9’组成,并且'+','-'只作为二元
运算符。
bool calculate(const char* exp, int &result);

 这题同样也没什么难点,递归,可是这个返回值为bool好像出题者的意思是不想你用递归,ok你让我用,我也不会用,用动态规划正中下怀

  直接上程序了:

   

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

void calculate(char* exp, int* result)
{
  int i = 0;
  int flag =1;
  int flag_tmp;
  int sum =0;
  
  while(1)
  {
   // printf("exp[%d] is %c\n", i, exp[i]);

    if(exp[i]=='-'||exp[i]=='+')
     {
       if(exp[i]=='-')
         flag_tmp=0;
       else
         flag_tmp=1;
       
       //printf("%c\n", exp[i]);

       exp[i]='\0';
       printf("exp is %s\n", exp);
       sum = atoi(exp);
       printf("sum is %d\n", sum);
       
       if(flag==1)
        *result += sum;
       else
        *result -= sum;
                              
     
       flag = flag_tmp;
       
       exp+=i+1;
       printf("%c\n", *exp);
       i=0;
     }
    else if(exp[i]=='\0')
     {
      sum = atoi(exp);
       if(flag==1)
        *result += sum;
       else
        *result -= sum;
      
      break;
     }
    else
       i++;
  }
  
}

int main(int argc, char *argv[])
{
  char str[] = "1+2-3+5+8-9-12+100";
  int ret = 0;
  
  printf("%s = ", str);
  calculate(str, &ret);
  printf("%d\n", ret);
  
  system("PAUSE");    
  return 0;
}

 

1:   
36匹马赛跑,跑道同时只能容许6匹马。而且36匹马速度不同,但是每次跑的速度恒定。
问,跑多少次可以选出第一,第二,第三名 

 

  哈哈,你自己先想想!!!这种题目,你的第一反映的答案肯定是错误的,告诉你把答案就是6次,记录下每匹马跑的时间嘛,空间换时间

 

2.

 给定一个字串X,求它最长字串S,使得S=SR,SR为S的反序,即如果S=abc,则SR=cba
例子:X=abccba,则输出S=abc
  回文了...

  可以用

  解法一:

    kmp的next数组解法

  解法二:

    动态规划的从中往两边走

  解法三:

    后缀数组

        abccba&abccba的最长公共前缀

   三种解法我blog里程序都有,今天我自己写的是解法二,今天比较钟情动态规划

  

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

void max_huiwen(char* str, int* index, int* max)
{
  int len = strlen(str);
  int start = 0;
  int end = 0;
  int left;
  int right;
  
  while(start<len)
  {
    end = start;
    while(end<len-1 && str[end]==str[end+1])
     end++;
     
    left = start;
    right = end;
    while(left-1>=0&&right+1<len&&str[left-1]==str[right+1])
     {
       left--;
       right++;
     }
    if(right-left+1>*max)
     {
       *max = right-left+1;
       *index = left;
     }
     start=end+1;
   }
}

int main(int argc, char *argv[])
{
  char* str = "ababcddcbaaa";
  //char str[]="aabcxdefggfedycbaa";

  int index = 0;
  int max = 0;
  
  printf("%s\n", str);
  
  max_huiwen(str, &index, &max);
  
  printf("index:%d, len:%d\n", index, max);
  system("PAUSE");    
  return 0;
}

 

  打完收工,看看我的hacking exposed去了

阅读(6900) | 评论(9) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-23 11:30:31

你知道什么是动态规划么? 半瓶醋!

chinaunix网友2010-08-26 22:41:02

http://hi.baidu.com/lj_jjinl/blog/item/8dd51d2365f39cfed6cae2f7.html/cmtid/76e78932e22ca6f61a4cff9b

chinaunix网友2010-08-26 20:51:41

招聘职位: 软件开发实习工程师 技能要求: 1. 熟悉Linux操作系统,熟练掌握Linux环境下C/C++编程和调试技术 2. 熟悉网络与流媒体知识(如IP, TCP/UDP, RTSP等),熟练掌握网络编程技术。 3. 熟悉java语言,熟练掌握java图形编程(如swing, awt等)。 4. 熟悉Python脚本语言,具有相关开发经验者优先。

chinaunix网友2010-08-25 11:27:47

装B

chinaunix网友2009-10-24 17:13:59

笔试的题目?