练习(六)

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值