• 締切済み

配列の重複削除について

データを作るプログラムで、配列の重複を削除したいのです。 配列の中身は乱数を発生させることで作ります。 内容は、 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)は重複しているので一方を削除 *()はつけない です。 プログラミング初心者なので、全くわかりません。 よろしくお願いします。

みんなの回答

回答No.5

  #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)
回答No.4

順序を保存する必要がないのであれば... 1. 比較用のファンクタを適切に作る。 2. 配列の全要素を、1.で作ったファンクタを指定したstd::setにinsertする。 3. std::setの全要素を洗い出す。 または、 1. 比較用のファンクタを適切に作る。 2. 1.で作ったファンクタを用いて配列を整列する。 3. std::uniqueまたはstd::unique_copyで重複要素を取り除く 型とかまったくわかりませんが、そんなときはジェネリックプログラミングの出番です。 > プログラミング初心者なので、全くわかりません。 がんばりましょう。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

>プログラミング初心者なので、全くわかりません。 たぶんあなたが全くわからないのなら、その問題を初めて聞く私たちは、余計に全くわかりません。 コーディング以前の問題でとまっているようですが、課題を解決するための手順を考えてみましょう。(ロジックとか処理の中身はわからなくてもいいから) そもそも >よろしくお願いします。 何をよろしくお願いされたのかもわからないです(笑)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

情報が圧倒的に不足しています。 (1)コードは、Cでしょうか? C++でしょうか? (2)配列の宣言だけでも書いてください。 (3)()はつけないとありますが、文字列処理ですか? 最低限、このぐらいは情報がほしいと思います。

  • sikimori
  • ベストアンサー率66% (2/3)
回答No.1

う~ん・・・。書いてあることの意味がイマイチよく分からないのですが・・・。 二次元配列をやる前に、一次元配列でやってみては?

関連するQ&A