已知有三种价格的产品,产品A(可以卖1、2、3、4元)产品B(可以卖5、6、7元)产品C(可以卖8、9、10元),产品数量比例:产品A、产品B、产品C的比例可以为3:3:4也可以为其它比例,但总比例和为10,已知三种产品的价格总和为149元,问可以怎么组合着卖?多少产品A(1,2,3,4元的分别是多少)?产品B(5、6、7元的产品分别是多少)?产品C(8、9、10元的产品分别是多少)?跪求版主解答

解决方案 »

  1.   

    下面是我的算法:public class JavaTest {
    public static void main(String[] args) {
    for (int a = 1; a <= 4; a++) {
    for (int b = 5; b <= 7; b++) {
    for (int c = 8; c <= 10; c++) {
    for (int x = 0; x <= 149; x++) {
    for (int y = 0; y <= 149 / 5; y++) {
    for (int z = 0; z <= 149 / 8; z++) {
    if (a * x + b * y + c * z == 149) {
    print(a, b, c, x, y, z);
    }
    }
    }
    }
    }
    }
    }
    } private static void print(int a, int b, int c, int x, int y, int z) {
    // 算出x,y,z的最大公约数
    int i = divisor(divisor(x, y), z);
    x /= i;
    y /= i;
    z /= i;
    //去掉最简比例中三个数之和大于10的比例数
    if (x + y + z <= 10) {
    int j = x + y + z;
    //判断最简比例能不能转化为和为10的比例数,如果能就打印出结果
    if (10 % j == 0) {
    System.out.println("它们的价格为: " + a + ", " + b + ", " + c);
    System.out.println("它们的比例为: " + (10/j) * x + ": " + y + ": " + z);
    }
    }
    } /**
     * 利用辗转相除法求两个数的最大公约数
     */
    private static int divisor(int x, int y) {
    int a = 0;
    if (x != 0 && y != 0) {
    if (x > y) {
    while (true) {
    a = x % y;
    if (a == 0)
    return y;
    x = y;
    y = a;
    }
    } else {
    while (true) {
    a = y % x;
    if (a == 0)
    return x;
    y = x;
    x = a;
    }
    }
    } else {
    if (x == 0)
    return y;
    if (y == 0)
    return x;
    }
    return 0;
    }
    }结果很意外,就一种方案:10:0:0。也不知道对不对
      

  2.   

    再把问题搞简单点,看有没有人会
    产品A数量为2(可以卖1、2、3、4元)产品B数量为8(可以卖5、6、7元)产品C数量为10(可以卖8、9、10元)已知三种产品的价格总和为149元问产品A(1,2,3,4元的产品分别是多少)?产品B(5、6、7元的产品分别是多少)?产品C(8、9、10元的产品分别是多少)?