目录
A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。
思路:计算题,第一个(A - B)和第三个(A+B)相加得出A,第二个(B - C)和第四个(B + C)相加得出B,在根据条件得出C
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int[] arr = new int[4];
for(int i = 0; i < arr.length; ++i){
arr[i] = scanner.nextInt();
}
int a = 0;
int b = 0;
int c = 0;
//求A,B
if((arr[0]+arr[2]) % 2 == 0 && (arr[1]+arr[3]) % 2 == 0){
a = (arr[0]+arr[2]) / 2;
b = (arr[1]+arr[3]) / 2;
}else{
System.out.println("No");
return;
}
//a,b都得大于0
if(a < 0 || b < 0){
System.out.println("No");
return;
}
//求C
if(b - arr[1] == arr[3] - b){
c = b - arr[1];
}
else{
System.out.println("No");
return;
}
System.out.println(a+" "+b+" "+c);
}
}
if...else看着太多头疼,那就直接合并一下,这样看着就能简单一点
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int[] arr = new int[4];
for(int i = 0; i < arr.length; ++i){
arr[i] = scanner.nextInt();
}
int a = (arr[0]+arr[2]) / 2;
int b = (arr[1]+arr[3]) / 2;
int c = b - arr[1];
//都能被整除,并且a,b都大于等于0,还有对于c的判断
if((arr[0]+arr[2]) % 2 == 0 && (arr[1]+arr[3]) % 2 == 0 &&
(b - arr[1] == arr[3] - b) && a >= 0 && b >= 0){
System.out.println(a+" "+b+" "+c);
}else{
System.out.println("No");
return;
}
}
}
进制转换_滴滴笔试题_牛客网
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
思路:首先得明白如何将十进制转为二进制,将十进制不断除2,并保留每次的余数,最后余数倒置拼接即为答案,那推到n进制,也是如此。
难点:2-9进制都可以取到数字,但是11-16进制如何做到,此时我们可以创建一个大小为16的字符数组,将0-F存入到数组中,每次的余数不就是数组的下标么,接着在数组中取对应的值即可。
易错点:1.要注意num为0的情况 2.要考虑num为负数的情况
核心代码:num为十进制值,n为要转化的进制,temp为每次的余数,arr[temp]为每次余数都对应的值,stringBuffer用来拼接这些字符,最后记着转置
StringBuffer stringBuffer = new StringBuffer();
char[] arr = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(num != 0){
int temp = num % n;
stringBuffer.append(arr[temp]);
num /= n;
}
完整代码:要考虑0,和负数情况
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();//输入的数字
int n = scanner.nextInt();//n进制
String str = objNum(num,n);
//num值为0的情况
if(num ==0){
System.out.println(0);
}else
System.out.println(str);
}
public static String objNum(int num, int n){
//判断正负问题
boolean flag = true;
if(num < 0){
flag = false;
num = -num;
}
//核心代码
StringBuffer stringBuffer = new StringBuffer();
char[] arr = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(num != 0){
int temp = num % n;
stringBuffer.append(arr[temp]);
num /= n;
}
//如果是负数就添加个负号
if(!flag)
stringBuffer.append('-');
stringBuffer.reverse();
return stringBuffer.toString();
}
}