#include
using namespace std;
void fullxunhuan(int **a,int n)
{
int t=0;
int m1,m2;
if(n%2!=0)
{n++;}
for(int i=0;i
{
for(m1=i,m2=n-i-1;m1<=n-i-1;m1++)
{
a[m1][m2]=t%n+1;
t++;
}
for(--m1,--m2;m2>i;m2--)
{
a[m1][m2]=t%n+1;
t++;
}
for(;m1>i;m1--)
{
a[m1][m2]=t%n+1;
t++;
}
for(;m2
{
a[m1][m2]=t%n+1;
t++;
}
}
}
void print(int **a,int n)
{
for(int i=0;i
{
for(int j=0;j
{
cout<
}
cout<
}
}
void main()
{
int **a;
int n;
cout<
cin>>n;
a=new int *[n];//申请一个N行N列的数组
for(int i1=0;i1
{
a[i1]=new int[n];
}
for(int i=0;i
{
for(int j=0;j
{
a[i][j]=0;
}
}
fullxunhuan(a,n);
print(a,n);
}
ACM小组内部预定函数
数学问题:
1.精度计算——大数阶乘
2.精度计算——乘法(大数乘小数)
3.精度计算——乘法(大数乘大数)
4.精度计算——加法
5.精度计算——减法
6.任意进制转换
7.最大公约数、最小公倍数
8.组合序列
9.快速傅立叶变换(FFT)
10.Ronberg算法计算积分
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算法求最小生成树
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 a[10000];
int i,j,l,c,m=0,w;
a[0]=1;
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=m;j++)
{
a[j]=a[j]*i+c;
c=a[j]/10000;
a[j]=a[j]%10000;
}
if(c>0) {m++;a[m]=c;}
}
w=m*4+log10(a[m])+1;
printf("\n%ld",a[m]);
for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);
return w;
}
2.精度计算——乘法(大数乘小数)
语法:m