fxhbeyond 2012-07-06 16:52
浏览 230
已采纳

求教一个算法

现在有n种楼,每种楼的面积已知,给定一个地块,地块总面积已知,要求每种楼摆多少个能满足总面积小于地块面积并且此地块不能再放楼的所有组合

  • 写回答

2条回答

  • feizhuzi 2012-07-09 12:23
    关注

    [code="java"]

    public class Demo {

    public static void main(String[] args) {
    
        //第一二三种楼的面积分别为 3 7 11, 假设是整数
        int[] bAreas = {3, 7, 11};
        //某块地的面积
        int availArea = 228;
        //上一次的结果
        int[] result = new int[bAreas.length];
        //收集结果
        List<int[]> list = new ArrayList<int[]>();
        //计算
        calc(bAreas, availArea, 0, result, list);
        //打印结果
        for (int[] is : list) {
            for (int i : is) {
                System.out.print(i + " ");
            }
            System.out.println();
        }
    }
    
    public static void calc(int[] bAreas, int availArea, int from, final int[] lastResult, List<int[]> list) {
        //楼的种类数
        int countOfKind = bAreas.length;
        //剩余面积
        int leftArea = availArea;
        //结果
        int[] result = Arrays.copyOf(lastResult, countOfKind);
    
        for (int i = from; i < countOfKind; i++) {
            int bArea = bAreas[i];
            int bCount = leftArea / bArea;
            result[i] = bCount;
            leftArea = leftArea % bArea;
    
    
            //递归
            int recursionTimes = bCount;
            int nextLeftArea = leftArea;
            int[] nextResut = Arrays.copyOf(result, countOfKind);
            while( (i != countOfKind - 1) && recursionTimes > 0){
                nextLeftArea += bArea;
                nextResut[i] = --recursionTimes;
                calc(bAreas, nextLeftArea, i+1, nextResut, list);
            }
    
        }
        list.add(result);
    }
    

    }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能