2013/08/12,秋季校招准备工作第一天。
1. 与K有关的数
题目:
输入正整数K与N,求出不大于N的与K有关的数的数目。与K有关的意思是:是K的非0整数倍或数字中包含K(如123中包含12和23等)。
解答:
先判断i能否被K整除,如果不能的话,用mask依次取i中长度为len(K)的一段与K对比。
int RelatedNumberCount(int K,int N)
{
if (N<=0 || K<=0 || N<K)
return 0;
int count = 1,i;
for (i = K+1; i < N+1; ++i)
if( (i%K == 0) || IsRelated(K,i))
++count;
returncount;
}
int IsRelated(int K,int N)
{
static int mask = 10;
while (mask <= K)
mask *= 10;
for ( ; N >= K; N /= 10)
if (N % mask == K)
return 1;
return0;
}
2. 走台阶
题目:
有一条有N级台阶的楼梯,从下往上走时,可以选择一步一个或者两个或者三个台阶,一共有多少种走法。
解答:
思路:采用迭代的方法,用ways[1,2,3]来保存当前向前走1,2,3个台阶后的走法。
double WayCount(int n)
{
double ways[5] = {0.0, 1.0, 2.0, 4.0};
if(n <= 3)
return ways[n];
int i;
for (i = 4; i <= n; ++i) {
ways[4] = ways[1] + ways[2] + ways[3];
ways[1] = ways[2];
ways[2] = ways[3];
ways[3] = ways[4];
}
return ways[4];
}