题目一
1.题目
题目链接:计算糖果
2.思路
题目看懂了之后,很简单。实质上就是解三元一次方程。
3.代码实现
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
int z = sc.nextInt();
int k = sc.nextInt();
int A = (x+z)/2;
int B = (y+k)/2;
int C = (k-y)/2;
int B1 = (z-x)/2;
if(B != B1){
System.out.println("No");
return;
}
System.out.println(A+" "+B+" "+C);
}
}
4.反思
这里在做题的时候,很奇怪的一点就是(针对我自己)我老是想着如何求解,事实上,当把条件列完之后,机器会帮我们求解的,我这神奇的思维卡了这一点,导致花费了很多时间,好像去年考教资做编程题的时候也是这样,希望这次经过这次,能有一点好的进步。
题目二
1.题目
题目链接:进制转换
2.思路
- 整体思路:通过十进制数的进制转换使用辗转相除法获取每步的余数;
- 需要对数字进行正负判断,我们用flag作为标志,如果十进制数为负数时,这个时候就需要将十进制数转换成一个整数进行转换,只不过在最后输出的时候在结果加上一个负号就好了
- 输出的值不止是阿拉伯数字,还有A-F,可以建立一个字符串table=”0123456789ABCDEF“;
- 辗转相除得到的结果最后输出需要反序,因为计算的结果是反的;
3.代码实现
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
if(m == 0){
System.out.println(0);
}
StringBuilder builder = new StringBuilder();
String table = "0123456789ABCDEF";
boolean flag = false;//判断正负
if(m < 0){
m = - m;
flag = true;
}
while(m != 0){
builder.append(table.charAt(m%n));
m =m/n ;
}
if(flag){
builder.append("-");
}
builder.reverse();
System.out.println(builder);
}
}
4.反思
首先是对于StringBuilder这个用法不熟悉,归根底。其次考虑不周到的地方是忘记了还有11-16进制与正负数判断这一点。总得来说,题目其实不难,如果不能写出代码,归根到底是语法知识不太熟悉,还得多练。最起码,现在我的输入输出比第一天好了吧哈哈哈哈哈…