一、计算糖果
1. 题目描述
A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。
2. 输入描述
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
3. 输出描述
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
4. 示例
输入:
1 -2 3 4
输出:
2 1 3
5. 解题思路
【题目解析】:
A,B,C是三个人手里的糖果数量,我们不知道A,B,C是多少?但是我们知道a=A - B,b= B - C,c= A + B, d=B + C的结果,
这个结果题目是通过输入测试用例给我们的。所以本题本质是一个表达式求解问题。
【解题思路】:
A=(a+c)/2;
B1=(c-a)/2;
C=(d-b)/2;
B2=(b+d)/2
如果B1不等B2则表达式无解,输出No;
否则有解,输出A,B,C。
6. 代码
import java.util.Scanner;
public class calculating_Candy {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
int b = 0;
int c = 0;
int d = 0;
while (sc.hasNextInt()) {
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
d = sc.nextInt();
int A = (a + c) / 2;
int B = (c - a) / 2;
int C = (d - b) / 2;
if (B != (b + d) / 2) {
System.out.println("No");
} else {
System.out.println(A + " " + B + " " + C);
}
}
}
}
二、进制转换
1. 题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
2. 输入描述
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
3. 输出描述
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
4. 示例
输入:
7 2
输出:
111
5. 解题思路
- 定义一个StringBuilder对象sb;
- 定义flag,判断正负,初值为false,也就是正数;
- 定义一个字符串变量 table,其中包含了十六进制数的字符表示形式;
- 判空;
- 判断m的正负性,如果为负,flag置为true;
- 利用table.charAt()是一个方法,它可以从字符串table中返回指定位置的字符;
- 判断如果flag是true,代表m是负数,需要在末尾拼接负号;
- 整体reverse转置;
- 输出结果。
6. 代码
import java.util.Scanner;
public class base_Conversion {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
//定义一个StringBuilder对象sb
StringBuilder sb=new StringBuilder();
//定义flag,判断正负,初值为false,也就是正数
boolean flag=false;
//定义一个字符串变量 table,其中包含了十六进制数的字符表示形式
String table="0123456789ABCDEF";
//base case
if(m==0){
System.out.println("0");
}
//判断m的正负性,如果为负,flag置为true
if(m<0){
m=-m;
flag=true;
}
//进制转换过程
while(m!=0){
//table.charAt()是一个方法,它可以从字符串table中返回指定位置的字符
sb.append(table.charAt(m%n));
m=m/n;
}
//如果flag是true,代表m是负数,需要在末尾拼接负号
if(flag==true){
sb.append("-");
}
//整体reverse转置
sb.reverse();
System.out.println(sb);
}
}