import maths = int(input())for _ in range(s): n, *xs = map(int, input().split()) mean = sum(xs) / n # Python 3의 /는 늘 실수 나눗셈이다 # 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 var = sum((x - mean) ** 2 for x in xs) / n print(f"{mean:.3f} {math.sqrt(var):.3f}")
JavaScriptmain.js · 12 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const s = Number(lines[0]);const out = [];for (let i = 1; i <= s; i++) { const [n, ...xs] = lines[i].trim().split(/\s+/).map(Number); // JS의 수는 모두 double이라 /는 늘 실수 나눗셈이다(합 10^12도 2^53 안이라 정확하다) const mean = xs.reduce((a, b) => a + b, 0) / n; // 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 const variance = xs.reduce((acc, x) => acc + (x - mean) ** 2, 0) / n; out.push(`${mean.toFixed(3)} ${Math.sqrt(variance).toFixed(3)}`);}console.log(out.join("\n"));
TypeScriptmain.ts · 13 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const s = Number(lines[0]);const out: string[] = [];for (let i = 1; i <= s; i++) { const [n, ...xs] = lines[i].trim().split(/\s+/).map(Number); // JS의 수는 모두 double이라 /는 늘 실수 나눗셈이다(합 10^12도 2^53 안이라 정확하다) const mean = xs.reduce((a, b) => a + b, 0) / n; // 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 const variance = xs.reduce((acc, x) => acc + (x - mean) ** 2, 0) / n; out.push(`${mean.toFixed(3)} ${Math.sqrt(variance).toFixed(3)}`);}console.log(out.join("\n"));
JavaMain.java · 27 行
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Locale;public class Main { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int s = Integer.parseInt(in.readLine().trim()); StringBuilder out = new StringBuilder(); for (int k = 0; k < s; k++) { String[] p = in.readLine().trim().split("\\s+"); int n = Integer.parseInt(p[0]); long[] xs = new long[n]; long sum = 0; // 10^9 × 1,000 = 10^12: int로는 넘친다 for (int i = 0; i < n; i++) { xs[i] = Long.parseLong(p[i + 1]); sum += xs[i]; } double mean = (double) sum / n; // long / int는 정수 나눗셈이라 한쪽을 double로 바꾼다 // 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 double sq = 0; for (long x : xs) sq += (x - mean) * (x - mean); out.append(String.format(Locale.ROOT, "%.3f %.3f", mean, Math.sqrt(sq / n))).append('\n'); } System.out.print(out); }}
C#Main.cs · 27 行
using System;using System.Globalization;using System.Linq;using System.Text;class Program{ static void Main() { int s = int.Parse(Console.ReadLine()); var sb = new StringBuilder(); for (int k = 0; k < s; k++) { long[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(long.Parse).ToArray(); int n = (int)p[0]; long[] xs = p.Skip(1).ToArray(); long sum = xs.Sum(); // 10^9 × 1,000 = 10^12: int로는 넘친다 double mean = (double)sum / n; // long / int는 정수 나눗셈이라 한쪽을 double로 바꾼다 // 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 double sq = xs.Sum(x => (x - mean) * (x - mean)); double sd = Math.Sqrt(sq / n); sb.Append(mean.ToString("F3", CultureInfo.InvariantCulture)).Append(' ') .Append(sd.ToString("F3", CultureInfo.InvariantCulture)).Append('\n'); } Console.Write(sb); }}
C++main.cpp · 24 行
#include <cmath>#include <cstdio>#include <iostream>#include <vector>int main() { int s; std::cin >> s; for (int k = 0; k < s; k++) { int n; std::cin >> n; std::vector<long long> xs(n); long long sum = 0; // 10^9 × 1,000 = 10^12: int로는 넘친다 for (auto& x : xs) { std::cin >> x; sum += x; } double mean = static_cast<double>(sum) / n; // 한쪽을 double로 바꿔야 실수 나눗셈이 된다 // 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 double sq = 0; for (long long x : xs) sq += (x - mean) * (x - mean); std::printf("%.3f %.3f\n", mean, std::sqrt(sq / n)); }}
Cmain.c · 26 行
#include <math.h>#include <stdio.h>int main(void) { int s; scanf("%d", &s); static long long xs[1000]; for (int k = 0; k < s; k++) { int n; scanf("%d", &n); long long sum = 0; /* 10^9 × 1,000 = 10^12: int(약 21억)로는 넘친다 */ for (int i = 0; i < n; i++) { scanf("%lld", &xs[i]); sum += xs[i]; } double mean = (double)sum / n; /* 한쪽을 double로 바꿔야 실수 나눗셈이 된다 */ /* 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 */ double sq = 0; for (int i = 0; i < n; i++) { double d = xs[i] - mean; sq += d * d; } printf("%.3f %.3f\n", mean, sqrt(sq / n)); } return 0;}
Craykonmain.cray · 20 行
s = 控制台.读行().转数字();循环 (k = 0; k < s; k++){ xs = 控制台.读数字(); n = xs[0]; // 맨 앞은 개수 sum = 0; 循环 (i = 1; i <= n; i++) { sum += xs[i]; } // 크레이콘의 /는 늘 실수 나눗셈이다(정수 몫은 수학.몫) mean = sum / n; // 평균을 먼저 구하고 평균과의 차를 제곱해 더한다(두 번 훑기): 큰 수끼리 빼는 일이 없다 sq = 0; 循环 (i = 1; i <= n; i++) { sq += (xs[i] - mean) * (xs[i] - mean); } 控制台.输出(字符.保留小数(mean, 3) + " " + 字符.保留小数(数学.平方根(sq / n), 3));}