求这两个题目的思路或者代码,谢谢了。。
1:商品采购:采购人员带着2万元现金去批发市场,准备购买A` B`C三种商品。商品A,B,C的批发单价分别是11.2远,13.6元,15.8元,起批数量分别是150,120,90,购买数量必须是起批数量的整数倍数。如果要求采购人员尽量多的采购物品(即剩下的钱越少越好),编写程序求购买商品A,B,C的数量分别是多少?剩下多小钱?(注够买数量可以为0)。
2:踩气球游戏:地上放着25个气球,每个气球上都有编号,编号是100以内的质数且互不相同(只能被1和它本身整除的正整数是质数,最小的质数是2,已知100以内的质数共有25个)。甲乙两人进行踩气球比赛,边踩气球边计算自己踩破气球的编号的乘积,比赛时间为10秒,比赛结束后甲乙两人报出乘积。胜负标准:
  1)一个气球只能被一个人踩破;
  2)报出的数不是100以内质数的乘积即计算错误,错误方判负,正确方判胜;
  3)两个人都计算错误判平;
  4)两个人都计算正确,报出的数,大的一方获胜,小的一方判负。编写程序,根据2个乘积判断双方的胜负。运行情况举例:
甲方结果:202
乙方结果:123
乙方获胜(202计算错误)
 
甲方结果:231
乙方结果:155
甲方获胜(都正确,数大的一方获胜)
 
甲方结果:303
乙方结果:325
都错误,平了

解决方案 »

  1.   

    第一个就贪心可以了,后面的题是做<判断一个数是不是1~100内不同质数乘积,比较两个数大小?>
      

  2.   

    第一题用背包可以,用11.2 * 150 = 1680
    13.6 * 120 = 1632
    15.8 * 90 = 1422作为3种物品的体积,20000作为背包容量,如果以剩下的钱越少越好作为标准,看这个数据规模,直接DP解背包就行,如果换为2000000元,则考虑构造1680, 1680 * 2, 1680 * 4, 1680 * 8......1632 , 1632 * 2......作为容量,解01背包即可。如果要求购买物品的数量越多越好,也是一样的,DP过程中加入权值即可,权值为150,120,90
    第二题的条件有个遗漏,比如二人均报17,这两人当中一定有一人算错,那该如何处理?
      

  3.   

    第一题我随便写了一个,请各位大大指教 private const float allMoney = 20000f;
            private float[] prices = new float[] { 11.2f, 13.6f, 15.8f };
            private int[] buyCount = new int[] { 150, 120, 90 };        private int p1;
            private int p2;
            private int p3;        private int g1Count;
            private int g2Count;
            private int g3Count;        private float buyMoney = 0f;
            
             private void DistinctForm_Load(object sender, EventArgs e)
            {
                buyGoods();
            }        private void buyGoods()
            {
                p1 = (int)(allMoney / (buyCount[0] * prices[0]));
                p2 = (int)(allMoney / (buyCount[1] * prices[1]));
                p3 = (int)(allMoney / (buyCount[2] * prices[2]));            for (int i = 0; i <= p1; i++)
                {
                    for (int j = 0; j <= p2; j++)
                    {
                        for (int k = 0; k <= p3; k++)
                        {
                            float money = i * prices[0] * buyCount[0] + j * prices[1] * buyCount[1] + k * prices[2] * buyCount[2];
                            if (money <= allMoney)
                            {
                                if (buyMoney == 0f)
                                {
                                    buyMoney = money;
                                    g1Count = i;
                                    g2Count = j;
                                    g3Count = k;
                                }
                                else
                                {
                                    if (money > buyMoney)
                                    {
                                        buyMoney = money;
                                        g1Count = i;
                                        g2Count = j;
                                        g3Count = k;
                                    }
                                }
                            }
                        }
                    }
                }
            }