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...