





代碼:
~~~
//轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8017703
bool 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/8017703
void 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/8017703
int 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;
}
~~~
- 前言
- 程序員有趣的面試智力題
- 淘寶網 校園招聘 技術人員筆試題
- 網新恒天2011.9.21招聘會筆試題
- 淘寶2011.9.21校園招聘會筆試題
- 騰訊2011.10.15校園招聘會筆試題
- 網易游戲2011.10.15校園招聘會筆試題
- 百度2011.10.16校園招聘會筆試題
- 微策略2011校園招聘筆試題(找出數組中兩個只出現一次的數字)
- 百度最新面試題集錦
- C/C++筆試題目大全
- 各大IT公司校園招聘程序猿筆試、面試題集錦
- Trie樹詳解及其應用
- 后綴數組求最長重復子串
- 海量數據隨機抽樣問題(蓄水池問題)
- 搜狐2012.9.15校園招聘會筆試題
- 搜狗2012.9.23校園招聘會筆試題
- Google2012.9.24校園招聘會筆試題
- 優酷土豆2012.9.12校園招聘會筆試題