备战蓝桥杯 DAY_03

//给定一个整数数组 nums,处理以下类型的多个查询:
//计算索引left和right(包含 left 和 right)之间的 nums 元素的 和 ,其中left <= right
//实现 NumArray 类:
//NumArray(int[] nums) 使用数组 nums 初始化对象
//int sumRange(int i, int j) 返回数组 nums中索引left和right之间的元素的 总和 ,包含left和right两点(也就是nums[left] + nums[left + 1] + ... + nums[right])
public class test01 {
    int [] sum ;
    public test01(int [] nums){
        sum = new int[nums.length+1];

        sum[0] = 0;
        for (int i = 1; i <= nums.length; i++) {
            sum[i] += sum[i-1] + nums[i-1];
        }
    }

    public int sumRange(int left, int right) {
        return sum[right+1] - sum[left];
    }

    public static void main(String[] args) {
        test01 ts = new test01(new int[]{1,2,3,4});
        System.out.println(ts.sumRange(0,2));//6
        System.out.println(ts.sumRange(1,3));//9
        System.out.println(ts.sumRange(0,3));//10
    }
}
import java.util.ArrayList;
//给你一个正整数数组arr,请你计算所有可能的奇数长度子数组的和。
//子数组 定义为原数组中的一个连续子序列。
//请你返回 arr中 所有奇数长度子数组的和 。
public class test02 {
    public static void main(String[] args) {
        int [] arr = {10,11,12};
        int count = 0;
        ArrayList<Integer> ls = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            for (int j = i; j < arr.length; j++) {
                ls.add(arr[j]);
                if (ls.size() % 2 != 0){
                    for (int k = 0; k < ls.size(); k++) {
                        count += ls.get(k);
                    }
                }
            }
            ls.clear();

        }

        System.out.println(count);//
    }
}
import java.util.ArrayList;
//给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。
//子数组 是数组的一段连续部分。
public class test03 {
    public static void main(String[] args) {
        int [] nums = {1,0,1,0,1};
        int goal = 2;
        int count = 0;
        ArrayList<Integer> ls = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            for (int j = i; j < nums.length; j++) {
                ls.add(nums[j]);
                int sum = 0;
                for (int k = 0; k < ls.size(); k++) {
                    sum += ls.get(k);
                }
                if (sum == goal){
                    count++;
                }
            }
            ls.clear();
        }
        System.out.println(count);
    }
}
//波利卡普急需铲子!他来到商店,挑选了一个合适的。波利卡普选择的铲子以k个伯勒斯的价格出售。假设商店中有无限数量的此类铲子。
//在他的口袋里,波利卡普有无限数量的“10-burle硬币”和一枚r-burles硬币(1 ≤ r ≤ 9)。
//Polycarp 必须购买的铲子的最低数量是多少,以便他可以在没有任何变化的情况下支付购买费用?很明显,
//他可以支付 10 铲子而无需任何变化(通过支付所需数量的 10 burle 硬币并且不使用 r burles 的硬币)。
// 但也许他可以买更少的铲子,不用找零钱就付钱。请注意,Polycarp应该至少购买一把铲子。
public class test04 {
    public static void main(String[] args) {
        int price = 15;
        int r = 2;

        for (int min_num = 1;min_num < price * 10;min_num++){
            for (int shiyuan = 1; shiyuan < price; shiyuan++) {

                if (shiyuan * 10 == price * min_num){
                    System.out.println("最少买"+min_num+"把");
                    return;
                }

                if (shiyuan * 10 > price * min_num){
                    if ((shiyuan-1) * 10 < price * min_num){
                        if ((shiyuan - 1) * 10 + r == price * min_num){
                            System.out.println("最少买"+min_num+"把");
                            return;
                        }
                    }
                }
            }


        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值