【牛客】从青铜到王者 01,java 基础入门第二版第二章答案
[](
)二、买苹果
========================================================================
[题目链接](
)
题目描述:
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供 6 个每袋和 8 个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好 n 个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好 n 个苹果,小易将不会购买。
输入要买的苹果,输出最少需要的袋子。
示例;
输入
20
输出
3
注意题目要求用最少的袋子去装苹果,就要注意条件了,通过穷
举发现 6 个苹果装的袋子不会超过 4 个,所以外面的大循环就是 6 个袋子的匹配,需要最少的袋子那么 6 个苹果的袋子就要尽可能的少。每次都是以差值 2 递增,就是加一个 8 个苹果的袋子,减少一个 6 个苹果的袋子。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int flg=0;
//两个数字相加只能是偶数。
if(n%2==1){
System.out.println(-1);
return;
}
//用 8 个苹果装的一般就是用最少的袋子
if(n%8==0){
System.out.println(n/8);
return;
}
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
if(n==(6i+8j)){
System.out.println(i+j);
flg=1;
return;
}
}
}
if(flg==0){
System.out.println(-1);
}
}
}
[](
)三、进制转换
=========================================================================
[题目链接](
)
题目描述:给定一个十进制数 M,以及需要转换的进制数 N。将十进制数 M 转化为 N 进制数。
示例:
输入
7 2
输出
111
进制转换需要用到辗转相除法来完成进制转换,十六进制还需要先将字母存储到数组中,在进行判断选择。
牛客的测试用例还有负数,需要加上一个判断,才能通过
import java.util.*;
public class Main{
public static void main(String [] args){
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int b=scan.nextInt();
StringBuffer sb=new StringBuffer();
char []ch={'A','B','C','D','E','F'};
int temp=0; int flg=1;//判断是否为负数
while(a!=0){
if(a<0){
a=-a;
flg=0;
}
temp=a%b;
if(temp>9){
sb.append(ch[temp-9-1]);
}else {
sb.append(temp);
}
a=a/b;
}
if(flg==0){
sb.append('-');
}
System.out.println(sb.reverse().toString());//将字符串逆序输出
}
}
[](
)四、连续最大和
==========================================================================
[题目链接](
)
题目描述:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
输入两行 第一行为数字串的长度,第二行为数字串
示例:
输入
3
-1 2 1
输出
3
要理解题目意思才能做出正确的答案,是将连续子数组最大和,并不是将正数相加,遇到负数置零,也要加负数进行比较,并且测试用例中还有纯负数,就要返回数组中最大的一个数值了
评论