Google2012 9 24校园招聘会笔试题

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               




代码:

//转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8017703bool IsPrime(int n)int i; if(n < 2)  return falseelse if(2 == n)  return trueif((n&1) == 0)    //n%2 == 0  return falsefor(i = 3 ; i*i <= n ; i += 2)     //只考虑奇数 {  if(n % i == 0)   return false; } return true;}/*考虑到所有大于4的质数,被6除的余数只能是1或者5比如接下来的5,7,11,13,17,19都满足所以,我们可以特殊化先判断2和3但后面的问题就出现了,因为并非简单的递增,从5开始是+2,+4,+2,+4,....这样递增的这样的话,循环应该怎么写呢?首先,我们定义一个步长变量step,循环大概是这样 for (i = 5; i <= s; i += step)那么,就是每次循环,让step从2变4,或者从4变2于是,可以这么写:*/bool IsPrime2(int n)int i, step = 4if(n < 2)  return falseelse if(2 == n || 3 == n)  return trueif((n&1) == 0)    //n%2 == 0  return falseif(n%3 == 0)      //n%3 == 0  return falsefor(i = 5 ; i*i <= n ; i += step) {  if(n % i == 0)   return false;  step ^= 6; } return true;}void print_prime(int n)int i , num = 0for(i = 0 ; ; ++i) {  if(IsPrime2(i))  {   printf("%d  " , i);   ++num;   if(num == n)    break;  } } printf("\n");}


代码:

//转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8017703void myswap(int a , int b , int* array)int temp = array[a]; array[a] = array[b]; array[b] = temp;}//利用0和其它数交换位置进行排序void swap_sort(int* array , int len)int i , j; for(i = 0 ; i < len ; ++i)          //因为只能交换0和其他数,所以先把0找出来 {  if(0 == array[i])  {   if(i)   //如果元素0不再数组的第一个位置    myswap(0 , i , array);   break;  } } for(i = 1 ; i < len ; ++i)     //因为是0至N-1的数,所以N就放在第N的位置处 {  if(i != array[i])    //这个很重要,如果i刚好在i处,就不用交换了,否则会出错  {   for(j = i + 1 ; j < len ; ++j)   {    if(i == array[j])    {     myswap(0 , j , array);   //把0换到j处,此时j处是0     myswap(j , i , array);   //把j处的0换到i处,此时i处是0     myswap(0 , i , array);   //把i处的0换到0处    }   }//for  } }//for}


代码:
//转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8017703int mymin(int a , int b , int c)int temp = (a < b ? a : b); return temp < c ? temp : c;}int min_edit_dic(char* source , char* target)int i , j , edit , ans; int lena , lenb; lena = strlen(source); lenb = strlen(target); int** distance = new int*[lena + 1]; for(i = 0 ; i < lena + 1 ; ++i)  distance[i] = new int[lenb + 1]; distance[0][0] = 0for(i = 1 ; i < lena + 1 ; ++i)  distance[i][0] = i; for(j = 1 ; j < lenb + 1 ; ++j)  distance[0][j] = j; for(i = 1 ; i < lena + 1 ; ++i) {  for(j = 1 ; j < lenb + 1 ; ++j)  {   if(source[i - 1] == target[j - 1])    edit = 0;   else    edit = 1;   distance[i][j] = mymin(distance[i - 1][j] + 1 , distance[i][j - 1]  + 1 , distance[i - 1][j - 1] + edit);   //distance[i - 1][j] + 1             插入字符   //distance[i][j - 1]  + 1            删除字符   //distance[i - 1][j - 1] + edit      是否需要替换  } } ans = distance[lena][lenb]; for(i = 0 ; i < lena + 1 ; ++i)  delete[] distance[i]; delete[] distance; return ans;}




           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/fguihbfg/article/details/84059617