【C语言】常见笔试算法题目0109

从今天开始,陆续接触一些常见的笔试算法题目,每次3道左右,加油!

010901:将一个大整数各位逆序后放入一个数组当中,要求递归实现算法。


//20150109 01 递归实现大整数逆序存入数组
#include<stdio.h>
//此函数即为递归所用函数,传入数组和大整数
void convert(int *result,int n){
 if(n>=10)
 convert(result+1,n/10);
 *result=n%10;
}
//这里是Linux-C 标准的main函数写法
int main(int argc,int argv[]){
 int n=14543789,result[20]={},i;  //n为大整数,result为数组,i为迭代变量
 convert(result,n);
 printf("%d:\n",n);
 for(i=0;i<8;i++){
 printf("%d\n",result[i]); }
}

以上代码在CentOS 系统环境下用gcc编译通过,文件命名为convert.c,用到的gcc命令为

gcc convert.c -o convert 

执行以上命令后会生成名为 convert的可执行文件,执行命令为

./convert

即可出结果。

010902:大整数因式分解,要求用递归实现


//20150109,02 因式分解
#include<stdio.h>
//因式分解函数,传入第一个数是要进行因式分解的数,第二个是因子
void prim(int m,int n){
 if(m>n){
 while(m%n!=0)n++;
 m /= n;
 prim(m,n);
 printf("%d*",n);
 }
}
//Linux-C的标准主函数形式
int main(int argc,char *argv[]){
 int n=45234;//大整数
 printf("%d =",n);
 prim(n,2);

}

以上代码在CentOS 系统环境下用gcc编译通过,文件命名为prim.c,用到的gcc命令为

gcc prim.c -o prim 

执行以上命令后会生成名为 prim的可执行文件,执行命令为

./prim

即可出结果。

010903:证明哥德巴赫猜想:任何一个偶数都可以分解成两个质数之和


#include<stdio.h>
#include<math.h>
int main(int agrc,char* argv[]){
 //Even是偶数,Prime1和Prime2是两个质数,Tmp1和Tmp2是中间变量
 int Even=232,Prime1,Prime2,Tmp1,Tmp2;
 for(Prime1=3;Prime1<=Even/2;Prime1+=2){
 for(Tmp1=2,Tmp2=sqrt(Prime1);Tmp1<=Tmp2&&Prime1%Tmp1!=0;Tmp1++);
 if(Tmp1<=Tmp2)continue;
 Prime2 = Even-Prime1;
 for(Tmp1=2,Tmp2=sqrt(Prime2);Tmp1<=Tmp2&&Prime2%Tmp1!=0;Tmp1++);
 if(Tmp1<=Tmp2)continue;
 printf("%d = %d + %d\n",Even,Prime1,Prime2);

 }

}

以上代码在CentOS 系统环境下用gcc编译通过,文件命名为gdbh.c,用到的gcc命令为

gcc gdbh.c -lm -o gdbh 

加上-lm参数是因为sort()函数不在math.h当中,要链接起来,执行以上命令后会生成名为 gdbh 的可执行文件,执行命令为

./gdbh

即可出结果。

参考资料:张子言.《常用算法深入学习实录》.电子工业出版社

每天进步一点点!

刘凯宁
20150109 凌晨

Share