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

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

3748閲覧

神経衰弱において、シャッフルした中身を2次元配列に挿入する方法について

ryamamot0

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/24 21:50

編集2020/07/25 02:24

現在、CUI上で行う神経衰弱を作成しています。
単語を50個用意し、ランダムにその中から単語を抽出し、並べています。
私は現在、0-49までの数値を別個で作成し、そこからランダムな数値を排出して上で、その数値をテーマによる配列の数字と合致させて行いたいと思っています。

今行いたいこと
・tmpArrに数値をgridsize分入力させる
・gridsizeに入っている数を2倍(数値を2倍ではない)にする
・ランダムに2次元配列に挿入する

どうかご教授下さい。よろしくお願いします。


現在記述しているコード

C++

1//main.cpp 2#include <iostream> 3using namespace std; 4#include <string> 5#include "memorymatchinggame.h" 6 7 8int main() 9{ 10 memorymatchinggame Game; 11 Game.start(); 12 return 0; 13}

C++

1//MemoryMatchGame.h 2 3#include <iostream> 4#include <vector> 5#include <string> 6#include <random> 7#include <numeric> 8#include <cassert> 9#include <time.h> 10#include <iomanip> 11using namespace std; 12 13class MemoryMatchGame 14{ 15private: 16 int gridSize; 17 int theme; 18 int timer; 19 string element[50] = {"H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn"}; 20 string fruits[50] = {"grape","apple","tangerine","satsuma","strawberry","pear","apricot","lime","orange","cantaloupe","jujube","papaya","fig","banana","honeydew","cherry","mango","kiwi","tomato","huckleberry","boysenberry","nectarine","grapefruit","pomegranate","passon_fruit","coconut","clementine","date","starfruit","peach","plum","blackberry","kumquat","guava","dragonfruit","raspberry","watermelon","pineapple","blueberry","avocado","lemon"}; 21 string candy[50] = {"Almond Joy","Cotton candy","Atomic Fireball","Twizzlers","Nik-L-Nips","Jawbreakers","Red Vines","Snickers","Junior Mints","Werther's Original","Smarties,Gummi Worms","Pixie Stix","Gummi Bears","Tootsie Rolls","Blow Pops","Peeps","Tootsie Roll Pops","Hershey Bar","Sour Patch Kids","Necco wafers","Three Musketeers","York Peppermint Patties","Candy corn","Butterfinger","Baby Ruth","Kit-Kat","Pocky","Jelly Belly","Jolly Ranchers","Mr. Goodbar","Nerds","Sugar Daddy","Swedish Fish","M&Ms","Toblerone","Circus peanuts","Skittles","Pop Rocks","Reese's pieces","Candy cigarettes","Twix","Milky Way","Milk Duds","Wax lips","Hershey's Kisses","Cadbury eggs","Starburst","Payday","Reese's Peanut Butter Cups"}; 22public: 23 void start(){ 24 cout << "Please choose grid size:" << endl; 25 cout << "If you want to play 4*4 grid size, press 4" << endl; 26 cout << "If you want to play 6*6 grid size, press 6" << endl; 27 cout << "If you want to play 8*8 grid size, press 8" << endl; 28 cout << "You choose: "; 29 cin >> gridSize; 30 cout << "<---------------------->" << endl; 31 cout << "Please choose theme:" << endl; 32 cout << "If you want to play element, press 1" << endl; 33 cout << "If you want to play fruits, press 2" << endl; 34 cout << "If you want to play candy, press 3" << endl; 35 cout << "You choose: "; 36 cin >> theme; 37 cout << "<---------------------->" << endl; 38 cout << "Please choose play spped:" << endl; 39 cout << "If you want to play 2seconds(Difficult), press 2" << endl; 40 cout << "If you want to play 4seconds(normal), press 4" << endl; 41 cout << "If you want to play 6seconds(easy), press 6" << endl; 42 cout << "You choose: "; 43 cin >> timer; 44 45 int **gridArr = new int*[gridSize]; 46 for(int i = 0; i < gridSize; i++) { 47 gridArr[i] = new int[gridSize]; 48 } 49 //いくつ必要なのかを計算する 50 int randomNum = (gridSize*gridSize)/2; 51 int shuffleArr[50];//ただの数字 52 //shuffleArrの中に順に数字を入力する 53 for(int i = 0;i < 50; i++) 54 { 55 shuffleArr[i] = i; 56 } 57 //時間を使用した乱数生成を行う 58 srand(time(NULL)); 59 //ここでランダムに数値を入れ替えていく 60 //後ろから順番に順に交換する. 61 //ここでshuffleArrの中身はシャッフルされる 62 /* 63 for (int i = 50; i > 1; --i) 64 { 65 int a = i-1; 66 int b = rand()%i; 67 //change shuffleArr[a] and ShuffleArr[b] 68 int tmp = shuffleArr[a]; 69 shuffleArr[a] = shuffleArr[b]; 70 shuffleArr[b] = tmp; 71 } 72 */ 73 //tmpArrで1次元配列を作成する 74 int tmpArr[randomNum]; 75 //tmpArrの中にランダムに作成した数値を入れる. 76 for(int i =0; i <randomNum ; i++) 77 { 78 tmpArr[i] = shuffleArr[i]; 79 }; 80 //cout << element[tmpArr[i]]でstring elementを呼び出す(後で書く) 81 82 83 assert( gridSize*gridSize % 2 == 0 ); 84 int num = gridSize * gridSize / 2; 85 int* data = new int[num*2]; 86 // 「0~num-1 で埋める」を二回やって 87 iota(data, data+num, 0); 88 iota(data+num, data+num*2, 0); 89 // かきまぜる 90 for (int i = 50; i > 1; --i) 91 { 92 int a = i-1; 93 int b = rand()%i; 94 //change shuffleArr[a] and ShuffleArr[b] 95 int tmp = shuffleArr[a]; 96 shuffleArr[a] = shuffleArr[b]; 97 shuffleArr[b] = tmp; 98 } 99 100 101 for (int r = 0; r < gridSize; ++r) 102 { 103 for (int c = 0; c < gridSize; ++c) 104 { 105 cout << gridArr[r][c] << ' '; 106 } 107 cout << endl; 108 } 109 110 111 //gridを作成している 112 for(int iii = 0; iii<gridSize;iii++) 113 { 114 cout << " " << iii+1 << " "; 115 } 116 cout << endl; 117 for (int ii = 0; ii <= gridSize; ii++) 118 { 119 cout << " - "; 120 } 121 cout << endl; 122 for (int i = 0; i < gridSize; i++) 123 { 124 cout << i + 1 << " | "; 125 for (int j = 0; j < gridSize; j++) 126 { 127 cout << "* "; 128 } 129 cout << endl; 130 } 131 132 133 } 134}; 135

コードのデバック

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

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

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

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

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

can110

2020/07/24 22:16

「その数値をテーマによる配列の数字と合致させて行いたい」 「gridsizeに入っている数を2倍(数値を2倍ではない)にする」など 全体的にやりたいことが理解できません。 より具体的に、また提示されたソースコードにあわせて説明ください。
ryamamot0

2020/07/24 22:30

・「その数値をテーマによる配列の数値と合致させて行いたい」について テーマを選択することによって、そのテーマに即した配列を用意しています。この場合でフルーツを選択した場合、fruits[1]はappleに当たります。この1の部分をshuffleArr[]で作成し、そこで、fruitsの配列のnumに当たる部分を作成したいと考えています。 ・「gridsizeに入っている数を2倍(数値を2倍ではない)にする」について 神経衰弱なので、同じ文字が2つ入っていないと成立しませんが、現状では、一回のみしか選ばれていない状況なので、これを2つ入れるにはどうすれば良いのかが分かりません。 言葉足らずですが、ご教授下さい。よろしく御願いします。
can110

2020/07/24 22:42

すみません。「~この1の部分を~」含めて、やはり全体的に理解できません。 文章での説明にくわえて、どの変数にどのような値がはいったら(theme=1なら?) 結果としてどの変数(shuffleArr?)にどのような値が入ってほしいといった具体的な例を示すと理解されやすいかと思います。2番目も同様です。
ryamamot0

2020/07/25 00:58

今先程自分のコードを更新しましたが、この時点で、tmpArr[]には異なった数値が入っています。 この後、神経衰弱なので、同じ数値が2つ必要なので、コピー&ペースト見たく、同じ数値をもう一つ作りたいです。 仮にtmpArr[] = {1,2,3,4,5,6,7,8}が入ったとすると、そこから1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8といった感じで、同じ数を増やしたいと思っています。 その後、どのようにしてtmpArr[]の数値と神経衰弱の中身(string elementやstring fruitsなど)をマッチさせるのが良いかわかりません。 例) tmpArr[0]が1だった場合、string elementの中のHeを呼び出せる状態にしたいです。 遅くなってしまってすみません。
episteme

2020/07/25 01:00

> tmpArr[0]が1だった場合、string elementの中のHeを呼び出せる状態にしたいです element[tmpArr[0]]
ryamamot0

2020/07/25 01:25

ありがとうございます。勉強になります。 もう一つの方はどうでしょうか?
episteme

2020/07/25 02:07

もう一つってコレ↓ですか? > 同じ数値が2つ必要なので、コピー&ペースト見たく、同じ数値をもう一つ作りたいです。 僕の回答では不満ですか?
ryamamot0

2020/07/25 02:25

大変助かりました。 因みに今試行してみましたが、一番下の行のみしかインプットされていませんでした。 どう修正すれば良いでしょうか?
episteme

2020/07/25 02:39

shuffleArr から gridArr に転記してませんけど?
guest

回答2

0

ベストアンサー

fruits が 50個ありませんでした。

C++

1#include <iostream> 2#include <vector> 3#include <string> 4using namespace std; 5 6class MemoryMatchGame 7{ 8private: 9 int gridSize; 10 int theme; 11 string element[50] = { 12 "H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si", 13 "P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni", 14 "Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb", 15 "Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn" 16 }; 17 string fruits[50] = { 18 "grape","apple","tangerine","satsuma","strawberry","pear","apricot", 19 "lime","orange","cantaloupe","jujube","papaya","fig","banana", 20 "honeydew","cherry","mango","kiwi","tomato","huckleberry", 21 "boysenberry","nectarine","grapefruit","pomegranate","passon_fruit", 22 "coconut","clementine","date","starfruit","peach","plum", 23 "blackberry","kumquat","guava","dragonfruit","raspberry", 24 "watermelon","pineapple","blueberry","avocado","lemon", 25 "fruit42","fruit43","fruit44","fruit45","fruit46","fruit47", 26 "fruit48","fruit49","fruit50" 27 }; 28 string candy[50] = { 29 "Almond Joy","Cotton candy","Atomic Fireball","Twizzlers", 30 "Nik-L-Nips","Jawbreakers","Red Vines","Snickers","Junior Mints", 31 "Werther's Original","Smarties,Gummi Worms","Pixie Stix", 32 "Gummi Bears","Tootsie Rolls","Blow Pops","Peeps", 33 "Tootsie Roll Pops","Hershey Bar","Sour Patch Kids","Necco wafers", 34 "Three Musketeers","York Peppermint Patties","Candy corn", 35 "Butterfinger","Baby Ruth","Kit-Kat","Pocky","Jelly Belly", 36 "Jolly Ranchers","Mr. Goodbar","Nerds","Sugar Daddy","Swedish Fish", 37 "M&Ms","Toblerone","Circus peanuts","Skittles","Pop Rocks", 38 "Reese's pieces","Candy cigarettes","Twix","Milky Way","Milk Duds", 39 "Wax lips","Hershey's Kisses","Cadbury eggs","Starburst","Payday", 40 "Reese's Peanut Butter Cups" 41 }; 42public: 43 void start() { 44 cout << "グリッドサイズを洗濯して下さい:\n" 45 "4*4をプレイしたい場合は4を入力して下さい\n" 46 "6*6をプレイしたい場合は6を入力して下さい\n" 47 "8*8をプレイしたい場合は8を入力して下さい\n" 48 "選んでください: "; 49 cin >> gridSize; 50 cout << "<---------------------->\n" 51 "テーマを選択して下さい:\n" 52 "元素に関してプレイしたい場合,1を押してください\n" 53 "果物に関してプレイしたい場合,2を押してください\n" 54 "お菓子に関してプレイしたい場合,3を押してください\n" 55 "選んでください: "; 56 cin >> theme; 57 58 vector<vector<int>> gridArr(gridSize, vector<int>(gridSize)); 59 60 int shuffleArr[50]; 61 for(int i = 0;i < 50; i++) //shuffleArrの中に順に数字を入力する 62 shuffleArr[i] = i; 63 for (int i = 50; i > 0; ) { 64 int b = rand() % i--; 65 int tmp = shuffleArr[i]; // shuffleArr[i] と ShuffleArr[b]を交換 66 shuffleArr[i] = shuffleArr[b]; 67 shuffleArr[b] = tmp; 68 } 69 int tmpArr[8 * 8]; 70 int randomNum = (gridSize * gridSize) / 2; 71 for(int i = 0; i < randomNum ; i++) 72 tmpArr[i] = tmpArr[i + randomNum] = shuffleArr[i]; 73 for (int i = randomNum * 2; i > 0; ) { 74 int b = rand() % i--; 75 int tmp = tmpArr[i]; // tmpAddr[i] と tmpAddr[b]を交換 76 tmpArr[i] = tmpArr[b]; 77 tmpArr[b] = tmp; 78 } 79 80 for (int k = 0, i = 0; i < gridSize; i++) 81 for (int j = 0; j < gridSize; j++) 82 gridArr[i][j] = tmpArr[k++]; 83 84 for (int k = 0, i = 0; i < gridSize; i++) { 85 for (int j = 0; j < gridSize; j++) 86 cout << gridArr[i][j] << ", "; 87 cout << endl; 88 } 89 90 cout << "---\n"; 91 string *p = theme==3 ? candy : theme== 2 ? fruits : element; 92 for (int i = 0; i < gridSize; i++) { 93 for (int j = 0; j < gridSize; j++) 94 cout << p[gridArr[i][j]] << ", "; 95 cout << endl; 96 } 97 } 98}; 99 100int main() 101{ 102 MemoryMatchGame Game; 103 Game.start(); 104}

投稿2020/07/25 03:24

編集2020/07/25 03:29
kazuma-s

総合スコア8224

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

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

ryamamot0

2020/07/25 04:06

回答して頂き有難うございます。 助かります。 一つ質問なのですが、 vector<vector<int>> gridArr(gridSize, vector<int>(gridSize)); はどういった動きをしているのでしょうか? vectorについてはまだ習っておらず、理解出来ていません。 よければお願いします。
kazuma-s

2020/07/25 16:09

int **gridArr = new int*[gridSize]; for(int i = 0; i < gridSize; i++) gridArr[i] = new int[gridSize]; と同じように、gridArr[i][j] で要素を参照できるようにメモリを確保するものです。 元のソースに #include <vector> があったので、使っていいものだと思っていました。
ryamamot0

2020/07/25 21:49

いえ、勉強中だったものですから、少し不安になっただけです。 大変助かりました。有難う御座います!
guest

0

C++

1#include <iostream> 2#include <iomanip> 3#include <random> 4#include <numeric> 5#include <cassert> 6 7int main() { 8 using namespace std; 9 10 int row = 6; 11 int col = 8; 12 assert( row*col % 2 == 0 ); 13 int num = row * col / 2; 14 int* data = new int[num*2]; 15 // 「0~num-1 で埋める」を二回やって 16 iota(data, data+num, 0); 17 iota(data+num, data+num*2, 0); 18 // かきまぜる 19 shuffle(data, data+num*2, random_device()); 20 21 // row行col列の行列を用意して、ナカミをdataで埋める 22 int** matrix = new int* [row]; 23 for ( int r = 0; r < row; ++r ) { 24 matrix[r] = data + r*col; 25 } 26 27 // できたかな 28 for (int r = 0; r < row; ++r) { 29 for (int c = 0; c < col; ++c) { 30 cout << setw(2) << matrix[r][c] << ' '; 31 } 32 cout << endl; 33 } 34 35 // あとしまつ 36 delete[] matrix; 37 delete[] data; 38}

投稿2020/07/24 22:53

編集2020/07/24 23:40
episteme

総合スコア16612

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問