配列[n, m, ..., z]が与えられたとき、
0から (nm...*z)-1個の連続した値を返すアルゴリズムはどんなものがありますか?
例
配列[2,3]の場合
0,1,2,3,4,5
配列[2,2,3]の場合
0,1,2,3,4,5,6,7,8,9,10,11
配列[1,1,6,2]の場合
0,1,2,3,4,5,6,7,8,9,10,11
配列[2,3,4]の場合
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
です。よろしくお願いいたします。
自分で考えられた範囲は、式の最後の項はzの加算であるということだけです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
C++
1#include <iostream> 2#include <vector> 3#include <numeric> 4 5using namespace std; 6 7int main() { 8 vector<int> input = { 2,3,4 }; 9 // inputの各要素を全部掛け、その数分の要素を作って 10 vector<int> output(accumulate(input.begin(), input.end(), 1, [](int x, int y) { return x * y;})); 11 /// 0, 1,2 ... で埋める 12 iota(output.begin(), output.end(), 0); 13 // かくにん 14 for ( int item : output ) cout << item << ' '; 15} 16
投稿2018/07/15 13:17
総合スコア16614
0
Python3.6だとこんな感じでしょうか。
Python
1from functools import reduce 2import operator as op 3 4def func(nums): 5 return list(range( 6 reduce(op.mul, nums) 7 )) 8 9def main(): 10 src = 与えられたリスト 11 print(src, func(src))
実行例 Wandbox
plain
1[2, 3] [0, 1, 2, 3, 4, 5] 2[2, 2, 3] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 3[1, 1, 6, 2] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 4[2, 3, 4] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
実用するならば返り値はジェネレータのままで良いです。
投稿2018/07/15 07:19
総合スコア35658
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
コードで書いたほうが早いので、とりあえずC++で。
C++
1// 可変長にしたいのでvectorを使う 2std::vector<int> intVector; 3 4/* ここでintVectorに値を追加 */ 5 6// intVectorの全要素の積を求める 7int maxNum = 1; 8for( std::vector<int>::iterator itr = intVector.begin(); itr != intVector.end(); itr++ ) { 9 10 maxNuM *= *itr; 11 12}// for(..itr..) 13 14// maxNum個の整数を出力する 15for( int i = 0; i < maxNum; i++ ) printf( "%d,", i ); 16printf( "\n" );
要は、「配列の全要素の積」を求めてしまえば、あとは単純なループで済みます。
なお、手抜きしたので最後の要素の後に','が出力されますが、ご了承下さい。
それと、上記コードでは省略しましたが、配列の要素にマイナスの値が入っていないかのチェックも必要です。
投稿2018/07/15 05:04
総合スコア298
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
JavaScript と Ruby で書いてみました。
JavaScript
javascript
1const getSeries = (nums) => { 2 const size = nums.reduce((p, n) => p * n); 3 return [...Array(size)].map((e,i) => i); 4}; 5 6console.log(getSeries([2,3])); // => [0, 1, 2, 3, 4, 5] 7 8console.log(getSeries([1,1,6,2])); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 9 10console.log(getSeries([2,3,4])); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] 11 12
上記と同じものを、以下に上げておきました。
https://jsfiddle.net/6jv9nqge/15/
Ruby
以下でよいかと思います。
ruby
1(0...[2,3].inject(&:*)).to_a # => [0, 1, 2, 3, 4, 5] 2 3(0...[1,1,6,2].inject(&:*)).to_a # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 4 5(0...[2,3,4].inject(&:*)).to_a # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
投稿2018/07/15 05:04
編集2018/07/15 05:17総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
配列[n, m, ..., z]が与えられたとき、
0から (nm...*z)個の連続した値を返すアルゴリズムはどんなものがありますか?
- for文 +
[]
Array()
+Array.prototype.keys()
+ スプレッド要素
Re: teefpc さん
投稿2018/07/15 05:01
編集2018/07/15 05:09総合スコア18156
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。