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

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

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

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

アルゴリズム

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

Q&A

解決済

3回答

2436閲覧

数値を割合によって均等分割するロジック

ms5025

総合スコア292

PHP

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

アルゴリズム

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

0グッド

0クリップ

投稿2019/08/13 19:13

編集2019/08/14 03:52

正の整数 x と n[] があるとします。xをn等分してください。
xはnで割り切れるとは限りませんが、できるだけ均等にn分割したいです。

例えば

A.n[0]=5000
B.n[1]=3000
C.n[2]=2000

の3つの数値があったとして

例として正の整数 X=1000 を 上記 A.B.Cの割合ごとに分割したいです
この場合だと [500,300,200]
という感じです

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

値/合計値の割合を値でかけて
最後の端数を合計値からマイナスというやり方しか
今の所思いつきません。
他のいい方法ありますでしょうか?

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

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

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

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

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

otn

2019/08/14 02:17 編集

何が難しいのでしょうか?行数を減らすこと?行数に意味は無いと思いますが。
ms5025

2019/08/14 03:50

課題ではないです。 普通に考えれば 値/合計値 で割合を出して算出しますが、 割り切れない場合が出てくると思います。 例えば X=587 だったり。 そう行った場合の最後の帳尻合わせに、 それまで出してきた値の合計から 全体を引き算で出ると思います。 そこまでは誰でもできる計算だと思うのですが、 それがもさいなぁと思うので、 もう少しスマートにするか、1行で記述できるような いいアイディアがあればなと思いました。 >行数に意味は無いと思いますが。 私は意味があると思っています。 上記の方法しかなければそれでやりますが・・
ms5025

2019/08/14 05:06 編集

アルゴリズムタグとソースはPHP指定です。 ソースを美麗化するためのヒントを探しています。 特に回答するつもりがなければほおっておいてもらえますか? >まずは自身でできるところまでやってみてください 上記の例はやっていますが (わざわざ記述しなかったのは記述するほどでもない 誰でも思いつく式だったからです) 特にいちゃもんつけたいだけなら、コメント不要です。
m.ts10806

2019/08/14 05:12

回答するつもりでもteratailの質問としてルールに沿っていないから指摘しているだけです。 それをいちゃもんと言われてしまうとこの質問サイト自体成り立ちません。 ヘルプから「質問するときのヒント」「推奨されない質問」を読んできてください。 下記のような表現で「課題ではない」「作業依頼ではない」と捉えるほうが難しいです。 本当に課題も作業依頼でもないのでしたら誤解を与えない表現に調整してください。 >正の整数 x と n[] があるとします。xをn等分してください。 >アルゴリズムタグとソースはPHP指定です。 それに下記は作業依頼でないのでしたら「自身でできている(そのコードを提示している)前提で初めて使える表現」です。 >なるべく少ない行数で実現するには
guest

回答3

0

ベストアンサー

最後の端数を合計値からマイナスというやり方しか

普通は、最大のところで、個数を調整します。
例だと、2000と3000に対応する個数を計算して、5000のところを引き算で出します。

投稿2019/08/14 07:09

otn

総合スコア84423

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

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

ms5025

2019/08/15 11:24

ありがとうございます! 私もそのやり方しか思いつかなかったのですが、結局それをするしかないという事ですよね。 ちょっともったりしていますが・・・しょうがないですね!
guest

0

比例代表選挙よろしく、ドント式でもやったら?

投稿2019/08/14 03:52

swordone

総合スコア20649

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

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

ms5025

2019/08/14 05:06

ヒントありがとうございます。 検索してやってみます!
guest

0

出来るだけで良いなら
分割する際に、切り捨てしておき
最後の数値を算出する際には
それまで出してきた値の合計から
全体を引き算します。

投稿2019/08/13 21:49

tgo

総合スコア61

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

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

ms5025

2019/08/14 05:07

ありがとうございます。 私もそれを一番に考えついたのですが、 もう少しスマートな方法があればと思って質問してみました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問