Files
leetcode-master/problems/kamacoder/0152.小米手机通信校准.md
programmercarl 268c5b2adc Update
2024-08-06 11:26:17 +08:00

3.1 KiB
Raw Blame History

152. 小米手机通信校准

题目链接

一道模拟题,但比较考察 代码能力。

遍历去找 里 freq 最近的 freg就好 需要记录刚遍历过的的freg和 loss因为可能有 相邻一样的 freg。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int freq;
    cin >> freq;
    string data;
    double result = 0;
    int last_freg = 0; // 记录上一个 freg
    int last_loss = 0; // 记录上一个loss 
    while(cin >> data) {
        int index = data.find(':');
        int freg = stoi(data.substr(0, index)); // 获取 freg 和 loss
        int loss = stoi(data.substr(index + 1)); 
        // 两遍一样
        if(abs(freg - freq) == abs(last_freg - freq))  {
            result = (double)(last_loss + loss)/2.0;
        } // 否则更新最新的result
        else if(abs(freg - freq) < abs(last_freg - freq)){
            result = (double)loss;
        }
        last_freg = freg;
        last_loss = loss;
    }
    printf("%.1lf\n", result);
    return 0;
}

Java 版本:


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int freq = sc.nextInt();
        sc.nextLine(); // 读取换行符

        String inputLine = sc.nextLine(); // 读取包含所有后续输入的行
        String[] data = inputLine.split(" "); // 根据空格分割输入

        double result = 0;
        int lastFreq = 0; // 记录上一个 freg
        int lastLoss = 0; // 记录上一个 loss

        for (String entry : data) {
            int index = entry.indexOf(':');
            int freg = Integer.parseInt(entry.substring(0, index)); // 获取 freg 和 loss
            int loss = Integer.parseInt(entry.substring(index + 1));

            // 两遍一样
            if (Math.abs(freg - freq) == Math.abs(lastFreq - freq)) {
                result = (double) (lastLoss + loss) / 2.0;
            }
            // 否则更新最新的 result
            else if (Math.abs(freg - freq) < Math.abs(lastFreq - freq)) {
                result = (double) loss;
            }

            lastFreq = freg;
            lastLoss = loss;
        }

        System.out.printf("%.1f\n", result);
        sc.close();
    }
}

Python版本

def main():
    import sys
    input = sys.stdin.read
    data = input().split()

    freq = int(data[0])
    result = 0
    last_freg = 0  # 记录上一个 freg
    last_loss = 0  # 记录上一个 loss

    for i in range(1, len(data)):
        item = data[i]
        index = item.find(':')
        freg = int(item[:index])  # 获取 freg 和 loss
        loss = int(item[index + 1:])

        # 两遍一样
        if abs(freg - freq) == abs(last_freg - freq):
            result = (last_loss + loss) / 2.0
        # 否则更新最新的 result
        elif abs(freg - freq) < abs(last_freg - freq):
            result = loss

        last_freg = freg
        last_loss = loss

    print(f"{result:.1f}")

if __name__ == "__main__":
    main()