常見演算法題

2021-08-30 09:02:23 字數 1403 閱讀 4113

1.用簡單素數篩選法求n以內的素數。

void printprime()	}	

}

2.使用位操作壓縮後的篩素數方法

#include #include int getprime(int primes,int max)

4.給定乙個包含n個整數的陣列,除了乙個數出現一次外,所有整數均出現三次,找出這個只出現一次的整數.

思路:對於出現3次的整數,它的二進位制每一位1出現的次數都是3次。將該位置為0,剩下的就是出現1次的數。

int singlenumber(int a,int n)

return ans;

}

6.輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次。

從乙個5位的數字舉例分析,先考慮其百位為1的情況。分3中情況討論(方便起見,計前三位為a,後兩位為b)

進一步統一百位數不為1的表示式(即百位數》=2或者==0):((a+8)/10)*100 

加8的原因:百位數大於等於2時,加8產生進製,此時(a+8)/10的值等於a/10+1的值,舉例:a=332時,a+8=340,340/10=34.而332/10+1=34

有了以上的分析,就可以很容易的寫出求去1~n中各個位上1出現的次數之和的**

int numberof1between1andn(int n)

return count;

}

7.求1+2+3+...+,要求不能使用乘除法、for、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)

//利用函式指標求解 

typedef unsigned int (*fun)(unsigned int);

unsigned int solution(unsigned int n)

unsigned int sum(unsigned int n)

; return n+f[!!n](n-1);

}

8.不使用加減乘除做加法

int add(int num1,int num2) 

while(num2 !=0);

return num1;

}

9.陣列a[n]中的元素為整數型別,請你設計乙個較快的演算法將其分為左右兩部分,使左邊均為奇數而右邊均為偶數。 

void swap(int a,int i,int j)

void oddevenpartition(int a,int n)

i++;

} }

演算法 常見演算法題

演算法題 假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣 一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次 然後他就說了如果只能夠取10次怎麼辦?一開始我想到...

常見演算法題

一 維護o 1 時間查詢最大元素的棧 問題描述 乙個棧stack,具有push和pop操作,其時間複雜度皆為o 1 設計演算法max操作,求棧中的最大值,該操作的時間複雜度也要求為o 1 可以修改棧的儲存方式,push,pop的操作,但是要保證o 1 的時間複雜度,空間時間複雜 度無要求。可以建立乙...

常見js演算法題

author laifeipeng date 2019 02 21 17 50 13 last modified by laifeipeng last modified time 2019 02 21 18 12 27 1 判斷回文字串 法一 function palindrome str retu...