質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

3回答

3683閲覧

数値を均等分割するロジック

ms5025

総合スコア292

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2019/08/13 03:08

正の整数 x と n があるとします。xをn等分してください。
xはnで割り切れるとは限りませんが、できるだけ均等にn分割したいです。
例えば、x=13, n=4 に対して (つまり13の4等分) は [3, 3, 3, 4] で、
割り切れる場合には、例えば x=15, n=3 に対してはもちろん [5, 5, 5] となります。

この[3, 3, 3, 4]、ないしは[5, 5, 5] を求める式を書く場合
なるべく少ない行数で実現するにはどのように記述しますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

13の4等分なら、商を求めると3になりますから[3, 3, 3, 3]の配列を作り、次に剰余を求めると1になりますから後ろ側の(どこでもいいかもしれませんが)1つをインクリメントして[3, 3, 3, 4]にすれば良いでしょう。

php

1<?php 2$x = 13; 3$n = 4; 4 5$a = intdiv($x, $n); 6$b = $x % $n; 7 8$result = array_fill(0, $n, $a); 9for ($i = $n - $b; $i < $n; $i++) { 10 $result[$i]++; 11} 12var_dump($result); 13?> 14
array(4) { [0]=> int(3) [1]=> int(3) [2]=> int(3) [3]=> int(4) }

投稿2019/08/13 04:01

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

PHP

1<?php 2$x = 13; 3$n = 4; 4print_r(array_map(function ($i) use($x, $n) {return intdiv($x, $n) + ($x % $n >= $i);}, range(1, $n)));
Array ( [0] => 4 [1] => 3 [2] => 3 [3] => 3 )

PHP

1<?php 2$x = 15; 3$n = 3; 4print_r(array_map(function ($i) use($x, $n) {return intdiv($x, $n) + ($x % $n >= $i);}, range(1, $n)));
Array ( [0] => 5 [1] => 5 [2] => 5 )

投稿2019/08/13 03:59

takepan1973

総合スコア821

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2019/08/13 19:06

ありがとうございます! 一行で記述ができて希望の結果が得られました。
guest

0

以前自分がこちらで質問させていただいた内容で以下のアルゴリズムがありますね。

数をだいたい等しく分配するアルゴリズム

分割後の各 v_i, (i = 0, 1, ..., n - 1) を

v_i = (i + 1) * x // n - i * x // n

で求めます。// は切り捨て除算 (例: 5//2=2) です。

サンプルコード

Python

python

1x = 100 2n = 7 3 4chunks = [] 5for i in range(n): 6 v = (i + 1) * x // n - i * x // n 7 chunks.append(v) 8 9print(chunks, sum(chunks)) # [14, 14, 14, 15, 14, 14, 15] 100

PHP

php

1$x = 100; 2$n = 7; 3$ret = []; 4 5for ($i = 0; $i < $n; $i++) { 6 7 $v = intdiv(($i + 1) * $x, $n) - intdiv($i * $x, $n); 8 array_push($ret, $v); 9} 10 11var_export($ret);
array ( 0 => 14, 1 => 14, 2 => 14, 3 => 15, 4 => 14, 5 => 14, 6 => 15, )

投稿2019/08/13 03:16

編集2019/08/13 03:27
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問