- 締切済み
配列の重複削除について
データを作るプログラムで、配列の重複を削除したいのです。 配列の中身は乱数を発生させることで作ります。 内容は、 1 1 1 4 2 8 2 10 3 4 4 3 5 2 6 3 8 2 といった感じです。 ルールは、 *一列目と二列目が同じ数字ではだめ *(2 8)と(8 2)、(3 4)と(4 3)は重複しているので一方を削除 *()はつけない です。 プログラミング初心者なので、全くわかりません。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- yaemon_2006
- ベストアンサー率22% (50/220)
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int random[45][2], data[10][2]; int i, j, k, temp; srand((unsigned)time(NULL)); for(k = i = 0; i < 10; i ++){ for(j = i + 1; j < 10; j ++){ random[k][0] = i + 1; random[k][1] = j + 1; k ++; } } for(i = 45; i > 1; ){ j = rand() % i --; temp = random[i][0]; random[i][0] = random[j][0]; random[j][0] = temp; temp = random[i][1]; random[i][1] = random[j][1]; random[j][1] = temp; } for(i = 0; i < 10; i ++){ data[i][0] = random[i][0]; data[i][1] = random[i][1]; } for(i = 0; i < 10; i ++) printf("(%d, %d)\n", data[i][0], data[i][1]); return 0; }
- jacta
- ベストアンサー率26% (845/3158)
順序を保存する必要がないのであれば... 1. 比較用のファンクタを適切に作る。 2. 配列の全要素を、1.で作ったファンクタを指定したstd::setにinsertする。 3. std::setの全要素を洗い出す。 または、 1. 比較用のファンクタを適切に作る。 2. 1.で作ったファンクタを用いて配列を整列する。 3. std::uniqueまたはstd::unique_copyで重複要素を取り除く 型とかまったくわかりませんが、そんなときはジェネリックプログラミングの出番です。 > プログラミング初心者なので、全くわかりません。 がんばりましょう。
- PED02744
- ベストアンサー率40% (157/390)
>プログラミング初心者なので、全くわかりません。 たぶんあなたが全くわからないのなら、その問題を初めて聞く私たちは、余計に全くわかりません。 コーディング以前の問題でとまっているようですが、課題を解決するための手順を考えてみましょう。(ロジックとか処理の中身はわからなくてもいいから) そもそも >よろしくお願いします。 何をよろしくお願いされたのかもわからないです(笑)
- zwi
- ベストアンサー率56% (730/1282)
情報が圧倒的に不足しています。 (1)コードは、Cでしょうか? C++でしょうか? (2)配列の宣言だけでも書いてください。 (3)()はつけないとありますが、文字列処理ですか? 最低限、このぐらいは情報がほしいと思います。
- sikimori
- ベストアンサー率66% (2/3)
う~ん・・・。書いてあることの意味がイマイチよく分からないのですが・・・。 二次元配列をやる前に、一次元配列でやってみては?