logo资料库

2012年9月24日Google校园招聘笔试试题.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
2012年9月24日Google校园招聘笔试试题
2012 年 9 月 24 日 Google 校园招聘笔试试题
代码: [cpp] view plaincopyprint? 1. //转载请标明出处,原文地址: http://blog.csdn.net/hackbuteer1/article/details/8017703 2. bool IsPrime(int n) 3. { 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. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. } 18. 19. /* 20. 考虑到所有大于 4 的质数,被 6 除的余数只能是 1 或者 5 21. 比如接下来的 5,7,11,13,17,19 都满足 22. 23. 所以,我们可以特殊化先判断 2 和 3
24. 但后面的问题就出现了,因为并非简单的递增,从 5 开始是+2,+4,+2,+4,....这样递增的 25. 这样的话,循环应该怎么写呢? 26. 27. 首先,我们定义一个步长变量 step,循环大概是这样 for (i = 5; i <= s; i += step) 28. 那么,就是每次循环,让 step 从 2 变 4,或者从 4 变 2 29. 于是,可以这么写: 30. */ 31. bool IsPrime2(int n) 32. { 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; 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. } 50. 51. void print_prime(int n) 52. { 53. 54. 55. 56. 57. 58. int i , num = 0; for(i = 0 ; ; ++i) { if(IsPrime2(i)) {
printf("%d " , i); ++num; if(num == n) break; } } printf("\n"); 59. 60. 61. 62. 63. 64. 65. 66. } 代码: [cpp] view plaincopyprint? 1. //转载请标明出处,原文地址: http://blog.csdn.net/hackbuteer1/article/details/8017703 2. void myswap(int a , int b , int* array) int temp = array[a]; array[a] = array[b]; array[b] = temp; 3. { 4. 5. 6. 7. } 8. 9. //利用 0 和其它数交换位置进行排序 10. void swap_sort(int* array , int len) 11. { 12. 13. int i , j; for(i = 0 ; i < len ; ++i) //因为只能交换 0 和其他数,所以先把 0 找出来 14. {
分享到:
收藏