渥太华IT面试编程试题 (中级)

不知道这办法是否高效,但是应该是对的吧?

中间是判断语句
n=1,
i=0,1
j,k,L=0
if 判断句在i=1是正好成立,所以count=1

不通。

当n=1, 结果应该是1. 你的呢?
 
不知道这办法是否高效,但是应该是对的吧?

中间是判断语句
n=1,
i=0,1
j,k,L=0
if 判断句在i=1是正好成立,所以count=1

因为max_nickel, max_dime, max_quater 都是 0, 这句 “if i+j*5+k*10+L*25=n then count+1;” 不会执行。

你用的是什么语言?
 
有数学规律的吧,我算术不好
代码:
    public static void main(String[] args) {

        try{
            System.out.println("scaling 4 : " + unitScalingCalculator(4));
            System.out.println("scaling 5 : " + unitScalingCalculator(5));
            System.out.println("scaling 6 : " + unitScalingCalculator(6));
            System.out.println("scaling 7 : " + unitScalingCalculator(7));
            System.out.println("scaling 10 : " + unitScalingCalculator(10));
            System.out.println("scaling 11 : " + unitScalingCalculator(11));
            System.out.println("scaling 15 : " + unitScalingCalculator(15));
            System.out.println("scaling 16 : " + unitScalingCalculator(16));
            System.out.println("scaling 20 : " + unitScalingCalculator(20));
            System.out.println("scaling 24 : " + unitScalingCalculator(24));
            System.out.println("scaling 25 : " + unitScalingCalculator(25));
            System.out.println("scaling 26 : " + unitScalingCalculator(26));
            System.out.println("scaling 49 : " + unitScalingCalculator(49));
            System.out.println("scaling 50 : " + unitScalingCalculator(50));
            System.out.println("scaling 51 : " + unitScalingCalculator(51));
            System.out.println("scaling 99 : " + unitScalingCalculator(99));
            System.out.println("scaling 100 : " + unitScalingCalculator(100));
            System.out.println("scaling 101 : " + unitScalingCalculator(101));

        }catch(Throwable e){
            e.printStackTrace();
        }
    }
    public static int scale(int n, int unit) {
        return (n - (n % unit)) / unit;
    }
    public static int unitScalingCalculator(int n) {
        final int[] units = new int[] {25, 10, 5, 1};
        int total = 0;
        for (int i=0; i<units.length; i++)="" {="">
            total += unitscales(n, units, i);
        }
        return total;
    }
    public static int unitscales(int n, int[] units, int index) {
        int total = 0;
        if (n <= 0 || index >= units.length) {
            return 0;
        }
        int scale = scale(n, units[index]);
        if (scale >= 1) {
            total++;
            int temp = index + 1;
            for (int i=temp; index < units.length && i++){<units.length; i++)="" {="">
                if (scale > 1) {
                    total += unitscales(n - units[index], units, temp);
                }
            }
        }
        return total;
    }
scaling 4 : 1
scaling 5 : 2
scaling 6 : 2
scaling 7 : 2
scaling 10 : 4
scaling 11 : 4
scaling 15 : 4
scaling 16 : 4
scaling 20 : 8
scaling 24 : 8
scaling 25 : 9
scaling 26 : 9
scaling 49 : 9
scaling 50 : 24
scaling 51 : 24
scaling 99 : 24
scaling 100 : 24
scaling 101 : 24
</units.length;></units.length;>
 
哦,明白你的意思了。
有些语言会执行的。我没有太多的注意语言。
C语言不执行下面这样的循环吗?

for i=0 to 0;
{y=2+2;}


因为max_nickel, max_dime, max_quater 都是 0, 这句 “if i+j*5+k*10+L*25=n then count+1;” 不会执行。

你用的是什么语言?
 
代码:
unitscales(int, int[], int)
</pre>是啥?
 
代码:
int scaleCalc(int n)
{
  if(n < 0)return 0;
  if(n == 0)return 1;
  return scaleCalc(n-1) + scaleCalc(n-5) + scaleCalc(n-10)+ scaleCalc(n-25);
}

简化下
int scaleCalc(int n)
{
  return n<0?0|(n==0?1|(scaleCalc(n-1) + scaleCalc(n-5) + scaleCalc(n-10)+ scaleCalc(n-25)));
}
谁给我试下这个 =)
 
哦,明白你的意思了。
有些语言会执行的。我没有太多的注意语言。
C语言不执行下面这样的循环吗?

for i=0 to 0;
{y=2+2;}

那就假设它执行吧, 我只是对你的语言陌生。你自己能测试下吗?
 
代码:
int scaleCalc(int n)
{
  if(n < 0)return 0;
  if(n == 0)return 1;
  return scaleCalc(n-1) + scaleCalc(n-5) + scaleCalc(n-10)+ scaleCalc(n-25);
}
谁给我试下这个 =)

scaling 4 : 1
scaling 5 : 2
scaling 6 : 3
scaling 7 : 4
scaling 10 : 9
scaling 11 : 13
scaling 15 : 42
scaling 16 : 58
scaling 20 : 197
scaling 24 : 676
scaling 25 : 916
scaling 26 : 1243
scaling 49 : 1422396
scaling 50 : 1931845
scaling 51 : 2623741
 
厉害,连我这个外行都看懂了,现在编程都通俗话了
 
应该是n==1 return 1?

代码:
int scaleCalc(int n)
{
  if(n < 0)return 0;
  if(n == 0)return 1;
  return scaleCalc(n-1) + scaleCalc(n-5) + scaleCalc(n-10)+ scaleCalc(n-25);
}

简化下
int scaleCalc(int n)
{
  return n<0?0|(n==0?1|(scaleCalc(n-1) + scaleCalc(n-5) + scaleCalc(n-10)+ scaleCalc(n-25)));
}
谁给我试下这个 =)
 
scaling 4 : 1
scaling 5 : 2
scaling 6 : 3
scaling 7 : 4
scaling 10 : 9
scaling 11 : 13
scaling 15 : 42
scaling 16 : 58
scaling 20 : 197
scaling 24 : 676
scaling 25 : 916
scaling 26 : 1243
scaling 49 : 1422396
scaling 50 : 1931845
scaling 51 : 2623741

对哈,会重复
 
刚发现cfc过滤了我代码里头的不少关键字啊
 
后退
顶部