算法题目:
小明去附近的水果店买橙子,水果商贩只提供整袋购买,有每袋3个和每袋5个的包装(包装不可拆分)。
可是小明只想购买恰好n个橙子,并且尽量少的袋数方便携带。如果不能购买恰好n个橙子,小明将不会购买。
请根据此实现一个程序,要求:
输入一个整数n,表示小明想要购买n(1≤n≤100)个橙子
输出一个整数表示最少需要购买的袋数,如果不能买恰好n个橙子则输出-1
思路:
(1)双层循环
import java.util.*;
public class testOrange {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
int a = n / 5 + 1; // 买5个一袋的最多能买多少袋
int b = n / 3 + 1; // 买3个一袋的最多能买多少袋
int temp = -1; // 最少需要的袋数
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
// 5个一袋的总数加上3个一袋的总数等于n 代表买j个3个一袋的和i个5个一袋的能刚好买到n个橘子
if (3 * j + 5 * i == n) {
temp = i + j;
break;
}
}
}
if(temp == -1){
System.out.println("当前输入数量无法求出最小袋数");
}
else{
System.out.println("最小袋数为:" + temp);// 输出需要的最少袋数
}
}
}
(2)单层循环
import java.util.*;
public class testOrange {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
int temp = -1; // 最少需要的袋数
for (int i = 0; i < n / 5 + 1; i++) { //外层循环求5个一袋需要多少袋
if ((n - (i * 5)) % 3 == 0) { //如果购买数量减去需要5个一袋的数量除3等0,此结果就是需要3个一袋的数量,不等于0则无法购买
temp = (n - (i * 5)) / 3 + i; //总数为3个一袋的数量+5个一袋的数量
}
}
if (temp == -1) {
System.out.println("当前输入数量无法求出最小袋数");
} else {
System.out.println("最小袋数为:" + temp);// 输出需要的最少袋数
}
}
}