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

来个真正需要写程序的。

试题 3. 假设你拥有无限数量的 quarters, dimes, nickels and pennies, 写个函数计算出可以代表(represent) n cents的方式的数量。
其实我没看懂题目
private static final int penny = 100;
private static final int quarter = 25;
private static final int dime = 10;
private static final int nickel = 5;

public static void moneyChange(int n) {
int tmp = n % penny;
int ap = (n - tmp) / penny;
int qp = (tmp - (tmp % quarter)) / quarter;
System.out.println(ap + " pennies");
System.out.println(gp + " quarters");
}
 
说到数学点的,做这题:

计算两个n阶多项式的乘积,要求O(nlogn)复杂度。注:多项式的阶数即其最高项的次数。比如:2x^4 + 3x^2 +1 的阶数是4。

搞信号处理应该会这个。
 
其实我没看懂题目
private static final int penny = 100;
private static final int quarter = 25;
private static final int dime = 10;
private static final int nickel = 5;

public static void moneyChange(int n) {
int tmp = n % penny;
int ap = (n - tmp) / penny;
int qp = (tmp - (tmp % quarter)) / quarter;
System.out.println(ap + " pennies");
System.out.println(gp + " quarters");
}

A penny is one cent.

举例: 50 cents, 可以是2个quarters, 也可以是1个quarter + 2个dimes + 1个nickel, 。。。。。。, 还可以是50个pennies。
 
用四个循环:

代码:
n=1000;
count=0;
do i=0 to n;
    max_nickle=int((n-i)/5);
    do j=0 to max_nickle;
        max_dime=int((n-i-j)/10);
        do k=0 to max_dime;
            max_quarter=int((n-i-j-k)/25);
            do L=0 to max_quarter;
                if i+j*5+k*10+L*25=n then count+1;
            end;
        end;
    end;
end;
 
A penny is one cent.

举例: 50 cents, 可以是2个quarters, 也可以是1个quarter + 2个dimes + 1个nickel, 。。。。。。, 还可以是50个pennies。
哦,这个意思啊
但是你应该加个规定吧
如果有多种单位的话只能从大到小

否则50cent可以分割为
前20cent是20 pennies
后30cent是1 quarter +1 nickel
n越大,可能性越无穷啊:rolleyes:
 
哦,这个意思啊
但是你应该加个规定吧
如果有多种单位的话只能从大到小

否则50cent可以分割为
前20cent是20 pennies
后30cent是1 quarter +1 nickel
n越大,可能性越无穷啊:rolleyes:

是组合,不是排列, 与前后无关。
 
不可能无穷,最懒散的估计是:
不会超过n的四次方
种办法。

哦,这个意思啊
但是你应该加个规定吧
如果有多种单位的话只能从大到小

否则50cent可以分割为
前20cent是20 pennies
后30cent是1 quarter +1 nickel
n越大,可能性越无穷啊:rolleyes:
 
用四个循环:

代码:
n=1000;
count=0;
do i=0 to n;
    max_nickle=int((n-i)/5);
    do j=0 to max_nickle;
        max_dime=int((n-i-j)/10);
        do k=0 to max_dime;
            max_quarter=int((n-i-j-k)/25);
            do L=0 to max_quarter;
                if i+j*5+k*10+L*25=n then count+1;
            end;
        end;
    end;
end;


不通。

当n=1, 结果应该是1. 你的呢?
 
后退
顶部