cong
(聪聪)
1
数字竞猜游戏
题目描述
参与者会在1到100之间选择一个数(最多精确至小数点后六位)。游戏结束时,根据所有参与者的数字总和 S,确定唯一的获胜者。规则如下:
- 计算所有参与者数字的总和 S,然后取出 S 的整数部分的个位数 D。
- 根据 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 个赞
cong
(聪聪)
3
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;
wisdgod
(知道)
4
你details内再套个代码块吧,现在这样显示不好
已阅,挺有创意的
nr0728
(Ciallo~(∠・ω<)⌒★)
7
我记得 LINUX DO 可以用 \LaTeX 的,是 Codeforces 版的 MathJax
nr0728
(Ciallo~(∠・ω<)⌒★)
9
用 $
符号,例如 $n$
\rightarrow n