Hackerrank – Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Vytvorím si kombinácie prvkov poľa, tak aby boli unikátne((i, j)
je rovnaké ako (j, i)
. Pre každú dvojicu urobím ich súčet. Ak je deliteľná zadaným deliteľom, pridám ju do celkového počtu.
Vytvoril som riešenie v týchto programovacích jazykoch:
Všetky riešenia sú dostupné aj na mojom GitHub profile.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.util.*; public class DivisibleSumPairs { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); int n = stdin.nextInt(); int divisor = stdin.nextInt(); int[] array = new int[n]; for(int i = 0; i < n; i++) { array[i] = stdin.nextInt(); } int count = 0; for(int i = 0; i < n - 1; i++) { for(int j = i + 1; j < n; j++) { if((array[i] + array[j]) % divisor == 0) { count++; } } } System.out.println(count); stdin.close(); } } |
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
'use strict'; const processData = input => { const lines = input.split('\n'); const line1 = lines[0]; const divisor = parseInt(line1.split(' ')[1]); const array = lines[1].split(' ').map(item => parseInt(item)); let count = 0; for(let i = 0; i < array.length - 1; i++) { for(let j = i + 1; j < array.length; j++) { if((array[i] + array[j]) % divisor === 0) { count++; } } } console.log(count); }; process.stdin.resume(); process.stdin.setEncoding("ascii"); let _input = ""; process.stdin.on("data", input => _input += input); process.stdin.on("end", () => processData(_input)); |
Scala
1 2 3 4 5 6 7 8 9 |
object DivisibleSumPairs extends App { val lines = Source.stdin.getLines().toList val divisor = lines(0).split(" ").map(_.toInt).toList(1) val array = lines(1).split(" ").map(_.toInt) val indexPairs = array.indices.flatMap(i => array.indices.slice(i + 1, array.length).map(j => (i, j))) val divisible = indexPairs.count(pair => (array(pair._1) + array(pair._2)) % divisor == 0) println(divisible) } |
Ruby
1 2 3 4 5 6 7 8 9 10 |
(n, divisor) = gets.split(" ").map {|i| i.to_i} array = gets.split(" ").map {|i| i.to_i} count = 0 for a in 0..(n-2) do for j in (a+1)..(n-1) do count += 1 if ((array[a] + array[j]) % divisor == 0) end end puts count |