Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //https://www.hackerrank.com/challenges/s10-basic-statistics/problem
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- class Solution {
- static void Main(String[] args) {
- /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution */
- int quantity = int.Parse(Console.ReadLine());
- string s = Console.ReadLine();
- int[] intArray = s.Split(' ').Select(str => int.Parse(str)).ToArray();
- double mean = Mean(intArray, quantity);
- Console.WriteLine(mean.ToString("F1"));
- double median = Median(intArray, quantity);
- Console.WriteLine(median.ToString("F1"));
- int mode = Mode(intArray, quantity);
- Console.WriteLine(mode);
- }
- public static double Mean(int[] intArray, int quantity){
- double sum = 0;
- foreach(int i in intArray){
- sum += i;
- }
- return sum / quantity;
- }
- public static void QuickSortRecursive(ref int[] data, int left, int right){
- if(left < right){
- int q = Partition(ref data, left, right);
- QuickSortRecursive(ref data, left, q - 1);
- QuickSortRecursive(ref data, q + 1, right);
- }
- }
- public static int Partition(ref int[] data, int left, int right){
- int pivot = data[right];
- int temp;
- int i = left;
- for(int j = left; j < right; ++j){
- if(data[j] <= pivot){
- temp = data[j];
- data[j] = data[i];
- data[i] = temp;
- i++;
- }
- }
- data[right] = data[i];
- data[i] = pivot;
- return i;
- }
- public static double Median(int[] intArray, int quantity){
- //először sorba kell rendezni
- QuickSortRecursive(ref intArray, 0, quantity-1);
- if(quantity % 2 == 1){
- return (double)intArray[quantity/2];
- }
- else{
- double medianHelper = intArray[quantity/2] + intArray[(quantity/2)-1];
- return medianHelper / 2;
- }
- }
- public static int Mode(int[] intArray, int quantity){
- int[,] helper = new int[quantity, 2];
- //feltöltjük a mennyiség jelölésére használt helyeket 0-val kezdésnek, a szám értékeket pedig -1-nek (ami nem lehet egyébként) defaultnak
- for(int i = 0; i < quantity; i++){
- helper[i,0] = -1;
- helper[i,1] = 0;
- }
- foreach(int i in intArray){
- int j = 0;
- while(helper[j,0] != -1 && helper[j,0] != i){
- j++;
- // ez elvileg akkor nem kell j < quantity &&
- }
- if(helper[j,0] == i){
- helper[j,1]++;
- }//egyébként nem volt találat
- else{
- helper[j,0] = i;
- helper[j,1]++;
- }
- }
- int k = 1;
- int maxIndex = 0;
- while(k < quantity && helper[k,0] != -1){
- if(helper[k,1] > helper[maxIndex,1]){
- maxIndex = k;
- }
- else if(helper[k,1] == helper[maxIndex,1] && helper[maxIndex,0] > helper[k,0]){
- maxIndex = k;
- }
- k++;
- }
- return helper[maxIndex,0];
- }
- }
Add Comment
Please, Sign In to add comment