求约束的最大三位数
问题描述:(e.g. 求555555的约束最大的三位数(777))
思想:i从999开始,递减,直到100. 其中i是所给数的约数,则输出
#include <stdio.h>
int main()
{
int n;
int i;
scanf("%d", &n);
for(i = 999; i >= 100; i --)
{
if(n % i == 0)
{
printf("%d\n", i);
break;
}
}
return 0;
}
次方的后三位
问题描述:求x的y次方的后三位(e.g. 13的13次方的后三位为253)
思想:乘积的最后三位的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。
#include <stdio.h>
int main()
{
int x, y, last = 1;
int i;
scanf("%d%d", &x, &y);
for(i = 0; i < y; i ++)
{
last = last * x % 1000;
}
printf("%d\n", last);
return 0;
}
阶乘尾数零的个数
问题描述:求N!尾数有多少个0?(e.g.100!的尾数有多少个0?)
思想:首先从数学上分析在 100!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子 5,则必然会在求 100!时产生一个零。因此问题转化为求 1 到 100,这 100 个整数中包含了多少个因子 5。若整数 N 能被 25 整除,则 N 包含 2 个因子 5;若整数N 能被 5 整除,则 N 包含 1 个因子 5……
#include <stdio.h>
int main()
{
int n, count = 0;
int pwr;
int i;
scanf("%d", &n);
for(i = 5; i <= n; i += 5)
{
count ++;
pwr = 25;
while(i % pwr == 0)
{
count ++;
pwr *= 5;
}
}
printf("%d\n", count);
return 0;
}
杨辉三角形
问题描述:在屏幕上显示杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
……………………
思想:(1)第n行有n个数
(2)第1个数和第n个数的值为1; 对于c(x,y) = c(x-1,y-1) + c(x-1,y)
#include <stdio.h>
int c(int x, int y)
{
if(y == 1 || y == x)
return 1;
else
return c(x - 1, y - 1) + c(x - 1, y);
}
int main()
{
int i, j, n;
scanf("%d", &n);
for(i = 1; i <= n; i ++)
{
for(j = 0; j < 2 * n - i; j ++)
printf(" ");
for(j = 1; j <= i; j ++)
printf("%d ",c(i, j));
printf("\n");
}
return 0;
}