我要创新ld的抽奖方式!!!

数字竞猜游戏

题目描述

参与者会在1到100之间选择一个数(最多精确至小数点后六位)。游戏结束时,根据所有参与者的数字总和 S,确定唯一的获胜者。规则如下:

  1. 计算所有参与者数字的总和 S,然后取出 S 的整数部分的个位数 D。
  2. 根据 D 的值确定获胜者:
    若 D 在 0 到 3 之间,数字最小的参与者获胜。
    若 D 在 4 到 6 之间,数字最大的参与者获胜。
    若 D 在 7 到 9 之间,数字最接近平均值的参与者获胜。若有多人距离相等,则编号较小的获胜。

输入格式

第一行:一个正整数 N,表示参与者人数。
接下来 N 行:每行一个实数 a_i,表示第 i 个参与者选择的数字。

其中:

1 ≤ N ≤ 100
1 ≤ a_i ≤ 100,a_i 可能有小数部分,精确至小数点后最多六位。

输出格式

输出一个整数,表示获胜者的编号(编号从1开始)。

样例 #1

输入

3
23.5
47.8
89.2

输出

1

样例解释

总和 S = 23.5 + 47.8 + 89.2 = 160.5,D = 0(整数部分160的个位数)。因为 D 在 0 到 3 之间,应选择最小的数字,即23.5。因此,编号为1的参与者获胜。

10 个赞

蓦然回首,退役真的已经好久了

1 个赞
gpt代码实现
#include <iostream>
#include <vector>
#include <cmath>
#include <limits>
#include <algorithm>

int main() {
    int N;
    std::cin >> N;

    std::vector<double> numbers(N);
    double sum = 0.0;
    for(int i = 0; i < N; ++i) {
        std::cin >> numbers[i];
        sum += numbers[i];
    }

    int D = static_cast<int>(sum) % 10; // 取整数部分的个位数

    int winner = -1; // 初始化获胜者编号

    if(D >= 0 && D <= 3) {
        // 找到最小数字,确保唯一性
        double min_num = *std::min_element(numbers.begin(), numbers.end());
        for(int i = 0; i < N; ++i) {
            if(std::abs(numbers[i] - min_num) < 1e-6) {
                winner = i + 1; // 编号从1开始
                break; // 已找到唯一的最小值
            }
        }
    } else if(D >= 4 && D <= 6) {
        // 找到最大数字,确保唯一性
        double max_num = *std::max_element(numbers.begin(), numbers.end());
        for(int i = 0; i < N; ++i) {
            if(std::abs(numbers[i] - max_num) < 1e-6) {
                winner = i + 1;
                break; // 已找到唯一的最大值
            }
        }
    } else if(D >= 7 && D <= 9) {
        // 找到最接近平均值的参与者,若有相同,选编号最小的
        double avg = sum / N;
        double min_diff = std::numeric_limits<double>::max();
        for(int i = 0; i < N; ++i) {
            double diff = std::abs(numbers[i] - avg);
            if(diff < min_diff - 1e-6) {
                winner = i + 1;
                min_diff = diff;
            } else if(std::abs(diff - min_diff) < 1e-6) {
                // 若有多个距离相同,选择编号最小的参与者
                continue;
            }
        }
    }

    std::cout << winner << std::endl;

    return 0;
}

一般Oier会用using namespace std;

你details内再套个代码块吧,现在这样显示不好
已阅,挺有创意的

谢谢,忘了。。。

#抽奖移除

15 个赞

我记得 LINUX DO 可以用 \LaTeX 的,是 Codeforces 版的 MathJax

主要是自己菜,打不出来qwq

$ 符号,例如 $n$ \rightarrow n

哇,大佬大佬,我没出过题的

不是大佬,只是恰好会用 \LaTeX

1 个赞

适用于人多的时候, 人少的时候20-30之间就有一定的偏差, LD都抽奖了,而不是发奖就说明他是想发出来 :tieba_003: :tieba_003: :tieba_003:

抽奖这么麻烦的啊