题目类型: 3 道编程题    考试时间: 2023-09-23 (两小时)      T1 分销粮食   粮食公司从农场收购了n吨粮食,现在需要平均分配给分销商进行销售(除不尽向下取整)。分销商数量若下,请计算分销商获得的粮食数量有几种可能。   输入   n: 粮食总量,0 < n <= 4294967295   输出   m:分销商获得的粮食数有几种可能   样例1   输入: 5输出:3                 分销商数量 1 2 3 4 5 6 7 ...                获得的粮食数量      5      2      1      1      1      0      0      ...                  总共5吨粮食,分销商获得的粮食数量可能为5/2/1吨,3种。      样例2   输入: 7输出:4                 分销商数量 1 2 3 4 5 6 7 8 ...                获得的粮食数量      7      3      2      1      1      1      1      0      ...                  总共7吨粮食,分销商获得的粮食数量可能为7/3/2/1吨,4种。      题解       模拟    获得的粮食数量 avg = 粮食总量 n / 分销商 k    枚举分销商数量计算出所有的获得的粮食数量的情况数,即为答案。    分类讨论:         avg == n / k && avg != k 此时 获得的粮食数量 有 avg 和 k 两种可能。     avg == n / k && avg == k 此时只能算一种情况。          import java.util.Scanner;// P1public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        long n = in.nextLong();        long cnt = 0, k = 1;        while (true) {            long avg = n / k;            // 必须这样优化,不然 ac 不了            if (avg > k) {                cnt += 2;            } else {                break;            }            k++;        }        if (k == n / k) cnt++;        System.out.println(cnt);    }}   T2 糖果迷宫   小华和小为在一个两行m列的糖果迷官里,迷官的每位置上都有对立的糖果数目a[i][j],他们只能向右或者向下移动。   小华和小为都将从迷宫左上方a[0][0] 位置出发,向有下角a[1][m-1]走,每到一个位置都将吃掉这个位置上的糖果。   假设小华先走,他走完后会吃掉路过的糖果,然后小为才开始走,被小华吃掉的糖果,小为就不能再吃了。   小华希望小为吃掉最少的糖果总数,然后小为也希望在小华走完后自己能吃掉更多的糖果总数。   请你帮忙计算小为最多可以吃掉多少糖果。   输入   第一行包含一个整教m(1<=m<=100000),标识迷宫的宽度。   接下来包含两行,每行包含m个整教,每一个整数a[i][j] (1 <= a[i][j] <= 10000),代表该位置的糖果教目。   吃掉更多的糖果总数   输出   输出小为最多可以吃到多少糖果。   样例1   输入:31 3 73 5 1输出:7解释:小华吃掉 1,3,5,1 ,小为吃掉 7。   样例2   输入:147输出:0   题解       枚举    枚举小华所有的吃法情况(在什么位置向下走),求那种情况下小华吃后小为吃到的糖果最少。      import java.util.Scanner;import java.util.stream.IntStream;// P2public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int m = in.nextInt();        int[][] a = new int[2][m];        for (int i = 0; i < 2; i++) {            for (int j = 0; j < m; j++) {                a[i][j] = in.nextInt();            }        }        Solution solution = new Solution();        System.out.println(             
点赞 13
评论 1
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务