首页 > 试题广场 >

小红的碾压墙

[编程题]小红的碾压墙
  • 热度指数:1302 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红是游戏《H炉》的一个主播。她经常去小红书发布关于H炉的卡牌研究攻略。

H炉有一张牌叫做碾压墙,可以消灭敌方最左边和最右边的随从,另一张牌叫做致命射击,可以随机消灭一个敌方随从。

如果小红使用两张致命射击恰好消灭了敌方最左边和最右边的随从(恰好造成了一张碾压墙的效果),就会有人在评论区发布“碾压墙” 。注意:两张致命射击的结算有先后顺序,即两张致命射击不会消灭同一个敌方随从。

现在有 n 个敌方随从,小红想知道她使用两张致命射击后,恰好造成一张碾压墙的效果的概率是多少。

输入描述:
第一行输入一个整数 n(2 \leq n \leq 10^6)


输出描述:
输出一个实数表示答案。小数点后保留10位。
示例1

输入

2

输出

1.0000000000

说明

只有两个随从,必然造成碾压墙的效果。
示例2

输入

3

输出

0.3333333333
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
// public class Main {
//     public static void main(String[] args) {
//         Scanner in = new Scanner(System.in);
//         // 注意 hasNext 和 hasNextLine 的区别
//         while (in.hasNextInt()) { // 注意 while 处理多个 case
//             int a = in.nextInt();
//             int b = in.nextInt();
//             System.out.println(a + b);
//         }
//     }
// }

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int n = in.nextInt();
        double res = 1.0000000000;

        if (n == 2) {

            // Java 的 System.out.println 在打印 double时,会采用最短的十进制表示形式,去掉不必要的零。
            // System.out.println(res);    // 输出1.0

            System.out.printf("%.10f%n", res);
        } else {
            System.out.printf("%.10f%n", res * 2 / n / (n - 1));
        }

    }
}
发表于 2025-04-09 16:08:48 回复(0)
高中数学 + 标准输入输出,标准输入输出还是要学会啊,遇到这题的时候忘记怎么写了 
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Long num = in.nextLong();
        if(num == 2) {
            System.out.printf("%.10f", 1.0000000000);            
        } else {
            Long temp = num * (num - 1);
            double res = 2.0 / temp;
            System.out.printf("%.10f", res);
        }
    }
}


发表于 2025-03-19 22:55:48 回复(0)