《C语言常用代码》由会员分享,可在线阅读,更多相关《C语言常用代码(28页珍藏版)》请在金锄头文库上搜索。
1、 完美WORD格式 #includeusing namespace std;void fullxunhuan(int *a,int n)int t=0;int m1,m2;if(n%2!=0) n+;for(int i=0;in%2;i+)for(m1=i,m2=n-i-1;m1i;m2-)am1m2=t%n+1;t+;for(;m1i;m1-)am1m2=t%n+1;t+;for(;m2n-i-1;m2+)am1m2=t%n+1;t+;void print(int *a,int n)for(int i=0;in;i+)for(int j=0;jn;j+)coutaijt; coutn;voi
2、d main() int *a;int n;cout请输入Nn; a=new int *n;/申请一个N行N列的数组for(int i1=0;i1n;i1+)ai1=new intn;for(int i=0;in;i+)/给数组初始化for(int j=0;jn;j+)aij=0;fullxunhuan(a,n); print(a,n);ACM小组内部预定函数数学问题: 1.精度计算大数阶乘2.精度计算乘法(大数乘小数)3.精度计算乘法(大数乘大数)4.精度计算加法5.精度计算减法6.任意进制转换7.最大公约数、最小公倍数8.组合序列9.快速傅立叶变换(FFT) 10.Ronberg算法计算积
3、分11.行列式计算12.求排列组合数字符串处理: 1.字符串替换2.字符串查找3.字符串截取 计算几何: 1.叉乘法求任意多边形面积2.求三角形面积3.两矢量间角度4.两点距离(2D、3D)5.射向法判断点是否在多边形内部6.判断点是否在线段上7.判断两线段是否相交8.判断线段与直线是否相交9.点到线段最短距离10.求两直线的交点11.判断一个封闭图形是凹集还是凸集12.Graham扫描法寻找凸包 数论: 1.x的二进制长度2.返回x的二进制表示中从低到高的第i位3.模取幂运算4.求解模线性方程5.求解模线性方程组(中国余数定理)6.筛法素数产生器7.判断一个数是否素数 图论: 1.Prim算
4、法求最小生成树2.Dijkstra算法求单源最短路径3.Bellman-ford算法求单源最短路径4.Floyd算法求每对节点间最短路径 排序/查找: 1.快速排序2.希尔排序3.选择法排序4.二分查找 数据结构: 1.顺序队列2.顺序栈3.链表4.链栈5.二叉树一、数学问题1.精度计算大数阶乘语法:int result=factorial(int n);参数:n:n 的阶乘返回值:阶乘结果的位数注意: 本程序直接输出n!的结果,需要返回结果请保留long a 需要 math.h源程序: int factorial(int n)long a10000;int i,j,l,c,m=0,w; a0
5、=1; for(i=1;i=n;i+) c=0; for(j=0;j0) m+;am=c; w=m*4+log10(am)+1;printf(n%ld,am); for(i=m-1;i=0;i-) printf(%4.4ld,ai);return w; 2.精度计算乘法(大数乘小数)语法:mult(char c,char t,int m);参数:c:被乘数,用字符串表示,位数不限t:结果,用字符串表示m:乘数,限定10以内返回值:null注意: 需要 string.h源程序: void mult(char c,char t,int m) int i,l,k,flag,add=0; char s
6、100; l=strlen(c); for (i=0;il;i+) sl-i-1=ci-0; for (i=0;i=10) si=k%10;add=k/10;flag=1; else si=k;flag=0;add=0; if (flag) l=i+1;si=add; else l=i; for (i=0;il;i+) tl-1-i=si+0; tl=0;3.精度计算乘法(大数乘大数)语法:mult(char a,char b,char s);参数:a:被乘数,用字符串表示,位数不限b:乘数,用字符串表示,位数不限t:结果,用字符串表示返回值:null注意: 空间复杂度为 o(n2) 需要 s
7、tring.h源程序: void mult(char a,char b,char s) int i,j,k=0,alen,blen,sum=0,res6565=0,flag=0; char result65; alen=strlen(a);blen=strlen(b); for (i=0;ialen;i+) for (j=0;j=0;i-) for (j=blen-1;j=0;j-) sum=sum+resi+blen-j-1j; resultk=sum%10; k=k+1; sum=sum/10; for (i=blen-2;i=0;i-) for (j=0;j=i;j+) sum=sum+
8、resi-jj; resultk=sum%10; k=k+1; sum=sum/10; if (sum!=0) resultk=sum;k=k+1; for (i=0;i=0;i-) si=resultk-1-i; sk=0; while(1) if (strlen(s)!=strlen(a)&s0=0) strcpy(s,s+1); else break; 4.精度计算加法语法:add(char a,char b,char s);参数:a:被乘数,用字符串表示,位数不限b:乘数,用字符串表示,位数不限t:结果,用字符串表示返回值:null注意: 空间复杂度为 o(n2) 需要 string.
9、h源程序: void add(char a,char b,char back) int i,j,k,up,x,y,z,l; char *c; if (strlen(a)strlen(b) l=strlen(a)+2; else l=strlen(b)+2; c=(char *) malloc(l*sizeof(char); i=strlen(a)-1; j=strlen(b)-1; k=0;up=0; while(i=0|j=0) if(i0) x=0; else x=ai; if(j9) up=1;z%=10; else up=0; ck+=z+0; i-;j-; if(up) ck+=1; i=0; ck=0; for(k-=1;k=0;k-) backi+=ck; backi=0; 5.精度计算减法语法:sub(char s1,char s2,char t);参数:s1:被减数,用字符串表示,位数不限s2:减数,用字符串表示,位数不限t:结果,用字符串表示返回值:null注意: 默认s1=s2,程序未处理负数情况 需要 string.h源程序: void sub(char s1,char s2,char t) int i,l2,l1,k; l2=strle