1、计算糖果 | 时间限制:1秒 | 内存限制:32768K
【题目描述】
A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。
【输入描述】
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
【输出描述】
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
【思路】
(1)根据题目可以得出,A,B,C三个值的计算公式
A=(Y1+Y3)/2;
B=(Y3-Y1)/2=(Y2+Y4)/2;
C=(Y4-Y2)/2;
(2)根据要求,若计算所得A,B,C不是整数,返回“No”,否则,返回A,B,C的值
①由于要进行除2的操作得到的只可能是浮点数,所以A,B,C的变量烈性设置为浮点型
②计算得到A,B,C的值之后,对其进行判断是否为整数
③再返回A,B,C的值时,要注意将浮点型转化为整型
【代码】
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
int y1 = sc.nextInt();
int y2 = sc.nextInt();
int y3 = sc.nextInt();
int y4 = sc.nextInt();
float A,B,C;
A = (y1 + y3)/2f;
B = (y2 + y4)/2f;
C = (y4 - y2)/2f;
if((A!=(y1 + y3)/2)||(B !=(y3-y1)/2)||(B != (y2 + y4)/2)||(C != (y4 - y2)/2)){
System.out.println("No");
return;
}
System.out.println((int)A+" "+(int)B+" "+(int)C);
}
}
}
1、n个数里出现次数大于等于n/2的数 | 时间限制:1秒 | 内存限制:32768K
【题目描述】
输入n个整数,输出出现次数大于等于数组长度一半的数
【输入描述】
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
【输出描述】
输出出现次数大于等于n/2的数。
【思路】
(1)根据题目,由于输入的数组大小是未知的,可以有两种解决方案:
方法一:按行输入,定义一个字符串,保存整个数组,将数组转化为字符串数组,再将字符串数组的内容逐一复制到int型的数组中
用到的关键方法:str.split(" "):按照空格切分字符串
Integer.valueOf(str):将数字字符串转为int
方法二:根据要求可知,数组长度不超过100,可以定义一个长度为101的int数组,将值存在数组中
(2)出现次数大于等于n/2的数,定义一个map,key表示数组元素,value表示出现次数,将数组所有元素,放到map中,再遍历map,找出value>=n/2的key
【代码】
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = sc.nextLine();
String[] ss = s.split(" ");
int[] a = new int[ss.length];
for(int i = 0;i<a.length;i++){
a[i] = Integer.valueOf(ss[i]);
}
System.out.println(half(a));
}
}
private static int half(int[] a) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<a.length;i++){
int count = map.getOrDefault(a[i],0);
map.put(a[i],count+1);
}
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
if(entry.getValue()>=a.length/2){
return entry.getKey();
}
}
return 0;
}
}