paizaラーニングレベルアップ問題集の「みかんの仕分け」を色々な言語でやってみた

paiza×Qiita記事投稿キャンペーンということで、paizaラーニングレベルアップ問題集の[みかんの仕分け](https://paiza.jp/works/mondai/c_rank_skillcheck_archive/mikan)を色々な言語でやってみました。対象は[コードモンスター大図鑑](https://paiza.jp/code_monster)で対応している9言語です。

2024/08/25
Javascriptのコードを修正いたしました。
- - -
###### 方針
みかんの重さ$w_i$（$1\le i\le M$）について、
```math
\max(\text{round}(w/N),1)\times N
```
が答えです。
- - -
###### PHP
```php
<?php
	global $n;
	[$n, $m] = explode(" ", fgets(STDIN));

	// みかんの仕分け先の重さ
	function mikan($w){
		global $n;
		return max(round($w / $n), 1) * $n;
	}
	
	for ($i = 0; $i < $m; $i++) {
		$w = fgets(STDIN);
		$y = mikan($w);
		echo "$y\n";
	}
?>
```
- - -
###### Ruby
```rb
$n, m = gets.split().map(&:to_i)


# みかんの仕分け先の重さ
def mikan(w)
	[(w + $n / 2) / $n, 1].max * $n
end


m.times do
	w = gets.to_i
	y = mikan(w)
	p y
end
```
- - -
###### Java	
```java
import java.util.*;

public class Main {
	// みかんの仕分け先の重さ
	static int n;
	static int mikan (int w) {
		return Math.max((w + n / 2) / n, 1) * n;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		int m = sc.nextInt();
		for (int i = 0; i < m; i++) {
			int w = sc.nextInt();
			int y = mikan(w);
			System.out.println(y);
		}
  		sc.close();
	}
}
```
- - -
###### Python
```py
n, m = map(int, input().split())


# みかんの仕分け先の重さ
def mikan(w):
	# return (round(w/n) or 1)*n は間違い
	return ((w + n // 2) // n or 1) * n


for _ in range(m):
	w = int(input())
	y = mikan(w)
	print(y)
```
:::note alert
Python3の`round`関数は偶数丸めですので、
```
max(round(w / n), 1) * n
```
```
(round(w / n) or 1) * n
```
は不正解です。
:::
- - -
###### C言語
```c
#include <stdio.h>

int max(int a, int b) {
	return a > b ? a : b;
}

// みかんの仕分け先の重さ
int n;
int mikan(int w) {
	return max((w + n / 2) / n, 1) * n;
}

int main(void){
	int m;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < m; i++) {
		int w;
		scanf("%d", &w);
		int y = mikan(w);
		printf("%d\n", y);
	}
	return 0;
}
```
- - -
###### C#
```cs
using System;

class Program
{
	// みかんの仕分け先の重さ
	static int n;
	static int Mikan(int w)
	{
		return Math.Max((w + n / 2) / n, 1) * n;
	}
	
	static void Main()
	{
		int[] nm = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
		n = nm[0];
		int m = nm[1];
		for (int i = 0; i < m; i++) {
			int w = int.Parse(Console.ReadLine());
			int y = Mikan(w);
			Console.WriteLine(y);
		}
	}
}
```
- - -
###### Javascript
2024/08/25 parseIntからNumberに修正
```js
const lines = require("fs").readFileSync("/dev/stdin", "utf8").split("\n");
// const [n, m] = lines[0].split(" ").map(s => parseInt(s, 10));
const [n, m] = lines[0].split(" ").map(Number);

// みかんの仕分け先の重さ
function mikan(w) {
	return (Math.round(w / n) || 1) * n;
}

for(var i = 1; i <= m; i++) {
	// let w = parseInt(lines[i], 10);
	let w = Number(lines[i]);
	let y = mikan(w);
	console.log(y);
}
```
- - -
###### C++
```cpp
#include <iostream>
#include <algorithm>
using namespace std;

// みかんの仕分け先の重さ
int n;
int mikan(int w) {
	return max((w + n / 2) / n, 1) * n;
}

int main(void){
	int m;
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		int w;
		cin >> w;
		int y = mikan(w);
		cout << y << endl;
	}
	return 0;
}
```
- - -
###### Kotlin
```kotlin
import java.util.*

// みかんの仕分け先の重さ
var n = 0
fun mikan(w: Int): Int {
	return Math.max((w + n / 2) / n, 1) * n
}

fun main() {
	val sc = Scanner(System.`in`)
	n = sc.nextInt()
	val m = sc.nextInt()
	for (i in 1..m) {
		var w = sc.nextInt()
		var y = mikan(w)
		println(y)
	}
	sc.close()
}
```