题目1:阶乘因式分解(一)
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
例:n=16,m=2,则输出15
题目2:蛇形填数
在n*n方阵里填入1,2,...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入n,输出方阵
博文1:编译器是如何工作的?
http://blog.jobbole.com/53222/
博文2:常见算法在实际项目中的应用
第二题
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
例:n=16,m=2,则输出15
题目2:蛇形填数
在n*n方阵里填入1,2,...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入n,输出方阵
博文1:编译器是如何工作的?
http://blog.jobbole.com/53222/
博文2:常见算法在实际项目中的应用
http://blog.jobbole.com/52669/
第一题
#include <stdio.h>
int factorial(int a);
int resolve(int data,int sign);
int resolve2(int data,int sign);
int main(int argc, char *argv[])
{
int m,n;
int cal_factors;
printf("Please input the value of n:\n");
scanf("%d",&n);
printf("Please input the value of m:\n");
scanf("%d",&m);
int sum;
sum=factorial(n);
cal_factors=resolve2(sum,m);
printf("There are %d factor %d in the factors of the number %d .",cal_factors,m,n);
return 0;
}
int factorial(int a)//¼ÆËã½×³Ë
{
int res=1;
while(a>=1)
{
res=a*res;
a--;
}
return res;
}
int resolve2(int data,int sign)
{
int flag=0;
while(data%sign==0)
{
flag++;
data=data/sign;
}
return flag;
}
第二题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int n;
printf("Please input the value of n:\n");
scanf("%d",&n);
drawMatrix(n);
return 0;
}
void drawMatrix(n)
{
int x=0;
int a[100][100];
memset(a,0,sizeof(a));
int y=n-1;
int val=1;
int i,j;
while (val<=n*n)
{
while (x<n && !a[x][y])
a[x++][y] = val++;
x--,y--;
while (y>-1 && !a[x][y])
a[x][y--] = val++;
x--,y++;
while (x>-1 && !a[x][y])
a[x--][y] = val++;
x++,y++;
while (y<n && !a[x][y])
a[x][y++] = val++;
x++,y--;
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
以16为例 16=2*8 * 2*7 * 2*6 * ... * 2*2 * 2*1 * 其他不含2的因式 2出现16/2次
除2后为8*7*6*5*4*3*2*1=2*4 * 2*3 * 2*2 * 2*1 * 其他不含2的因式 2出现8/2次
...
代码如下
int analysis(int n,int m)
{
int sum=0;
while (n!=0)
{
sum += n/m;
n = n/m;
}
return sum;
}