校招季——编程题目(1-2)

2013/08/12,秋季校招准备工作第一天。

1.     K有关的数

题目:

输入正整数KN,求出不大于N的与K有关的数的数目。与K有关的意思是:是K的非0整数倍或数字中包含K(如123中包含1223等)。

解答:

先判断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]来保存当前向前走123个台阶后的走法。

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];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值