虽说已经找到了实习,offer也拿了,但是还是决定多上来刷刷一些简单的,很水的笔试面试题。
这些题仅适合学渣级的算法菜鸟学习,ACM的大神们请自动略过。
?
将一个数分解成质因数的形式,例如:
10=2*5 100=2*2*5*5
其实这道题的实现很简单。设一个i初始值为2,然后用该数一直除,递增i即可。
以下是实现:
?
#include测试图:#include int main() { while(true){ printf( 请输入数字: ); int number; scanf(%d,&number); if(number<0){//考虑输入不合法 printf(输入不合法(<0)); continue; } if(number==0||number==1){//考虑输入的是0或者1 printf(%d=%d,number,number); continue; } int i=2; printf(%d=,number); while(number>=i){ while(number%i==0){ //一直除i,直到不能整除时,i+1 printf(%d,i); if(number!=i) printf(*); number=number/i; } i++; } } getch(); }
?

?
?
如何判断一个数是否是质数。
这个就更简单了。
直接上源码:
?
#include测试截图:#include #define TRUE 1 #define FALSE -1 int isPrime(int number){//c 没有bool类型... if(number<=1){//考虑输入不合法 printf(输入不合法(<2) ); return FALSE; } if(number==2) return TRUE; int i=2; while(i<=number){ while(number%i==0){ if(i==number) return TRUE; else return FALSE; } i++; } } int main() { while(TRUE){ printf( 请输入数字: ); int number; scanf(%d,&number); if(isPrime(number)==TRUE) printf(%d is a prime number! ,number); else printf(%d not a prime number! ,number); } getch(); }
?

不过如果一个数比较大的时候,这个时间复杂度就会比较大,一个比较好的方法就是利用其平方根。
i的最大值只需递增到sqrt(n)即可。(原因是i*i==n时,i就是中间的那个因子)
源码:
?
#include测试图:#include #include #define TRUE 1 #define FALSE -1 int isPrime(int number){//c 没有bool类型... if(number<=1){//考虑输入不合法 printf(输入不合法(<2) ); return FALSE; } if(number==2) return TRUE; int i=2; int counts=1; while(i<=sqrt(number)){ if(number%i==0)//如果整除,因子数+1 counts++; i++; } if(counts==1) return TRUE; else return FALSE; } int main() { while(TRUE){ printf( 请输入数字: ); int number; scanf(%d,&number); if(isPrime(number)==TRUE) printf(%d is a prime number! ,number); else printf(%d not a prime number! ,number); } getch(); }
?

?
?
?