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

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

ただいまの
回答率

90.52%

  • JavaScript

    16389questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Python

    7953questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • C

    3685questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • Visual C++

    115questions

    Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

  • Visual Basic 6.0

    15questions

    Microsoft Visual Basic 6.0(VB6)とはCOMプログラミングのためにMicrosoftが提供したプログラミング言語とintegrated develpment enviornment(IDE)のことです。

配列から自動生成されるアルゴリズム

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 405

teefpc

score 9

配列[n, m, ..., z]が与えられたとき、
0から (n*m*...*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の加算であるということだけです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

checkベストアンサー

+1

コードで書いたほうが早いので、とりあえずC++で。

// 可変長にしたいのでvectorを使う
std::vector<int> intVector;

/* ここでintVectorに値を追加 */

// intVectorの全要素の積を求める
int maxNum = 1;
for( std::vector<int>::iterator itr = intVector.begin(); itr != intVector.end(); itr++ ) {

    maxNuM *= *itr;

}// for(..itr..)

// maxNum個の整数を出力する
for( int i = 0; i < maxNum; i++ ) printf( "%d,", i );
printf( "\n" );

要は、「配列の全要素の積」を求めてしまえば、あとは単純なループで済みます。
なお、手抜きしたので最後の要素の後に','が出力されますが、ご了承下さい。
それと、上記コードでは省略しましたが、配列の要素にマイナスの値が入っていないかのチェックも必要です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

配列[n, m, ..., z]が与えられたとき、
0から (n*m*...*z)個の連続した値を返すアルゴリズムはどんなものがありますか?

  • for文 + []
  • Array() + Array.prototype.keys()+ スプレッド要素

Re: teefpc さん

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

こんにちは。

JavaScript と Ruby で書いてみました。

 JavaScript

const getSeries = (nums) => {
    const size = nums.reduce((p, n) => p * n);
    return [...Array(size)].map((e,i) => i);
};

console.log(getSeries([2,3])); // => [0, 1, 2, 3, 4, 5]

console.log(getSeries([1,1,6,2])); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

console.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]

上記と同じものを、以下に上げておきました。

https://jsfiddle.net/6jv9nqge/15/

 Ruby 

以下でよいかと思います。

(0...[2,3].inject(&:*)).to_a  # => [0, 1, 2, 3, 4, 5]

(0...[1,1,6,2].inject(&:*)).to_a  # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

(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]

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

こんな漢字で

$ echo '[2,3,4]'|tr '[,' ' *'|sed 's/]/-1/'|bc|xargs seq 0|xargs|tr ' ' ','
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

Python3.6だとこんな感じでしょうか。

from functools import reduce
import operator as op

def func(nums):
    return list(range(
        reduce(op.mul, nums)
    ))

def main():
    src = 与えられたリスト
    print(src, func(src))

実行例 Wandbox

[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]

実用するならば返り値はジェネレータのままで良いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int main() {
  vector<int> input = { 2,3,4 };
  // inputの各要素を全部掛け、その数分の要素を作って
  vector<int> output(accumulate(input.begin(), input.end(), 1, [](int x, int y) { return x * y;}));
  /// 0, 1,2 ... で埋める
  iota(output.begin(), output.end(), 0);
  // かくにん
  for ( int item : output ) cout << item << ' ';
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    PHPやJAVAを使ってアルゴリズムを学びたい

    PHPやJAVAを使ってアルゴリズムに関するスキルを身につけようと思っています。 PHPやJAVAでアルゴリズムが学べるオススメ参考書やURLなにかありましたら教えてください。

  • 解決済

    漸化式について

    漸化式の問題について質問です. P_(n+1) = ((n+2)/(n+1))*P_(n) + (2n)/(n+1) という漸化式なのですが特性方程式を使って解くのかと考え,何

  • 受付中

    アルゴリズムの入門書

    アルゴリズム入門の勉強におすすめの書籍、サイトなど教えてもらえないでしょうか? CheckiOというpython学習サイトを進めているのですが、難しくてなかなか進まないのでアルゴ

  • 解決済

    PHPを通してアルゴリズムを勉強したいのですが

    現在PHPを勉強中なのですが、アルゴリズムなるものに興味が出てきました。 そこで、PHPでアルゴリズムを学ぶ際におすすめの書籍を教えて下さい(´・ω・`) ちなみに勉強を始

  • 解決済

    c言語についての質問です

    あるテキストを辞書順にソートし、別のテキストに出力するプログラムを作成したいです。 include<stdio.h> include<stdlib.h> include<

  • 解決済

    疑似コードの記号について

    疑似コードで記されている、両端に矢印が付いた記号や、両端が四角の記号。 それと、処理の合間に入っている棒。 これらの作用を教えてください。

  • 受付中

    二分木探索のsearchの中身

    目的 二分木探索の実装 問題点 下記コードのBTNode searchの部分がどう書けばいいのか分かりません。 調べてみましたが、明確な解決策が見つかりませんでした。 ソー

  • 解決済

    入力された長文から登録されている単語をあいまい検索する方法は?

    単語から長文を検索するのは一般的な検索エンジンの動作ですが、 入力された長文から、事前に登録された単語を現実的な早さで「あいまい検索」することは可能でしょうか? また、それを作るた

同じタグがついた質問を見る

  • JavaScript

    16389questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Python

    7953questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • C

    3685questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • Visual C++

    115questions

    Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

  • Visual Basic 6.0

    15questions

    Microsoft Visual Basic 6.0(VB6)とはCOMプログラミングのためにMicrosoftが提供したプログラミング言語とintegrated develpment enviornment(IDE)のことです。