不太重要的前言:我刚开始刷题的时候挺不习惯的,因为我只用过JavaScript和C/C++刷过题,但是这个豆包的AI刷题没出这两种交题方式。而且入营要先刷至少14个题,本来我还挺苦恼要怎么写的。 看前几个题其实都没什么思路,不知道要怎么写,所以后面问其他人怎么写。他就告诉我要怎么做,这个思路我很好奇是怎么想到的,然后他说可以问AI这个题的思路。后面我就用JavaScript写了一个题,我就试了一下看看能不能让AI将JavaScript代码转换成java代码,转换好之后我提交就通过了,然后后面的这些题我用的都是这种方法。
题目链接:第191题 juejin.cn/problemset.…
题目分析:这个题目是一个困难题,但是挺简单的。题目大概意思是:工厂可以生产不同种类糖果,但是每天每种种类的糖果只能生成指定颗。工厂需要生成a包(每包指定包含b颗相同类型的糖果)糖果,但是不要求糖果的种类是什么。问需要多少天才能完成a包?
解题思路:那也就是说,我只需要把每天的每种糖果全部生产出来,然后看看能组成多少包,如果满足了已经存在a包以上的糖果了,就可以不用继续生产糖果了。
所以我用一个数组sum存储每一种种类的糖果的个数。用一个变量k存储天数。
接下来用了一个while循环,每一层循环代表一天,在这个循环(这一天)中,我用for循环遍历每一种糖果的的生产个数的数组,在sum数组上累加对应的糖果数量。
其中变量w是用来记录这一天中已经生成的糖果包的数量。一天的糖果生产完成后(也就是for循环结束),我就比较变量w和参数a的大小。如果生成已经达标了(w>=a)就退出while循环;否则就继续循环,直到满足条件为止。
后面就是返回这个变量w就好了
整个代码如下:
public class Main {
public static int solution(int n, int a, int b, int[] candies) {
int[] sum = new int[n];
int k = 0;
while (true) {
int w = 0;
for (int i = 0; i < n; i++) {
sum[i] += candies[i];
w += sum[i] / b;
}
if (w >= a) {
break;
}
k++;
}
return k + 1;
}
public static void main(String[] args) {
int[] candies1 = {7, 9, 6};
int[] candies2 = {3, 10, 8, 4};
int[] candies3 = {1, 10};
System.out.println(solution(3, 10, 20, candies1) == 10);
System.out.println(solution(4, 5, 15, candies2) == 4);
System.out.println(solution(2, 100, 5, candies3) == 46);
}
}