Google2012 9 24校園招聘會筆試題
阿新 • • 發佈:2018-11-15
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
程式碼:
//轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8017703bool IsPrime(int n){ int i; if(n < 2) return false; else if(2 == n) return true; if((n&1) == 0) //n%2 == 0 return false; for(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 = 4; if (n < 2) return false; else if(2 == n || 3 == n) return true; if((n&1) == 0) //n%2 == 0 return false; if(n%3 == 0) //n%3 == 0 return false; for(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 = 0; for(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] = 0; for(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;}