• 締切済み

配列の重複削除について

データを作るプログラムで、配列の重複を削除したいのです。 配列の中身は乱数を発生させることで作ります。 内容は、 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

  • java 乱数を並べて重複させない方法

    javaのプログラミングについて質問させてください。 まだ勉強し始めの初級者です。 1~25までの乱数を発生させ それらを重複させずに5列×5行に並べたいのですが、 Randomとfor文を使い乱数を発生させる事はできたのですが重複してしまいます。 ネットで調べたらArraylistのcontainsを使う等書いてあったのですが方法が分かりません。 5列×5行というのは ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 ○、○、○、○、○、 という風に並べたいです。(○はすべて違う数字) どなたか分かる方ご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列にある重複要素を削除したい(VBA)

    エクセルVBAにて、あるルールで対象となるセルの値を配列に格納しております。 配列の要素には重複しているものもあるため、重複要素を配列から削除したいのですが その方法が分かりません。 どなたか、よろしくご教授下さい。

  • 多次元配列から重複を削除

    Perlにて$f[i][j]のような2次元配列でデータを格納しています。 ここの[i]列には重複したデータが入っているので、 それを排除して[i]列の重複なしの配列を新たに作りたいのですが うまくいきません。 for ($j=0; $j<= $index; $j++){ if($chlist[j]==$f[$i][0]){ $chlist[j]==$f[$i][0]; last; } } こんな感じで作ってみたのですが永遠にデータが入りません。

  • Excelで、重複したデータを消す方法

    Excelで、一列にずらっと数字が並んでいたとしますね。その数字の中から、重複したデータを選び、そのデータごと消去してしまう方法はあるでしょうか?(例:A列に”1,5,9,8,7,7,9,9,4,3,1”と並んでいたとき、1,7,9を検索し、A列からこの1,7,9を削除してA列に”5,8,4,3,”と表示させる方法です。)よろしくお願いします。

  • 配列変数に重複のないランダムな数字を入れて行くには?

    JavaScript初心者です。 配列にランダムな数字を入れたいのですが、 aRnd = new Array(); aRnd[0] = Math.floor(Math.random()*100); aRnd[1] = Math.floor(Math.random()*100); aRnd[2] = Math.floor(Math.random()*100); のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか? なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。 よろしくお願いいたします。

  • 重複乱数で処理終了

    java のプログラミングについて質問です。 乱数を発生させ それまでと同じ値が出たら 処理を終了させる。 というプログラムを考えています。 例えば乱数が 1,4,2,6,5,7,9,3,4,3,6,5,4,5,6,7,8,8,9,7,・・・ という順で出た場合 1,4,2,6,5,7,9,3 のみを【表示】させ、処理を終了するというものです。 重複したときに処理を終了する というプログラムが分からない状態です。 分かる方いらっしゃいましたら、ご教授願います。

    • ベストアンサー
    • Java
  • 配列の中に重複文字列があるか否かをチェックしたいのですが、アルゴリズムを教えてください。

    配列10000個の中に次のように文字列が入っているとします。 (実際に使うのはもっとずっと長い文字列が配列内に格納されています。) Data_Array[1] = "GRZRMZCOMKMSG" Data_Array[2] = "DCUIROTLUMWBC" Data_Array[3] = "RGLBMILRPBSMY" . . . Data_Array[9998] = "RSKFDHAHMOESI" Data_Array[9999] = "AQVOXBVNILGOP" Data_Array[10000] = "YNYRUPEXYOGFN" 配列Data_Array[10000]の中に重複文字列がないか探索したいと考えています。 ~普段の手順~ 配列中身を一度テキストに吐き出し、そのテキストをExcelに貼り付ける。 そして、Excelのフィルタ機能で重複文字列を排除。 その後、重複文字列を排除した文字列を保存したものをテキストファイルに保存する。 それをプログラムで読み込んで配列内に格納してから次の処理を続ける といった、効率の悪い方法をとっています。 そこで、プログラム内で処理する方法を次のように考えてみました。 ~思いつく方法~ dim DataArrayTemp[10000] for i = 1 to 10000 flag = 0 // 重複文字がないかチェック for j = i+1 to 10000 ifb Data_Array[i] = Data_Array[j] then // 重複があった場合はflag = 1にする flag = 1 break // 内ループ脱出 endif next // flag = 0であれば重複がない項目 (flag = 1のときは、重複がある) ifb flag = 0 then DataArrayTemp[temp_i] = Data_Array[i] temp_i = temp_i + 1 endif next これは、力技なので配列内の量が多くなると計算時間がかかってしまいます。 ですので、重複しない文字列だけを抽出する効率の良い方法がありましたらどなたか知恵を貸してください。

  • C言語で重複組合せを全列挙

    よろしくお願いします。当方プログラミング初心者です。 ある配列a[]={1,1,2,2,3,3}があります。 この配列の重複組合せを全列挙したいのですが、 どういうプログラムを組めばいいのでしょうか? よろしくお願いします!

  • 2次元配列について

    プログラミング初心者です。2次元配列のイメージがつかめません。教えてください。 例えばExcelの表があり、A列に名前のデータ、B列にその人の住所のデータがあったとします。プログラミングで1次配列の値だけ取得するような処理が書かれていた場合、名前のデータだけを取得しているのでしょうか?因みに$var[0]というように数字ではなく、何かを示す名前になっています。例えば$var[name0]や$var[name1]のようになっています。これが$var[name0][place0]や$var[name1][place0]みたいになっていたら住所のデータを取得するのでしょうか?

    • ベストアンサー
    • PHP
  • エクセルで重複するセルを削除したい

    エクセル2000で同じ内容のセルが複数あったとき、ひとつだけを残し他を削除する方法を教えてください。 ただし少し条件があります。 データーは5列100行位からなっています。 A列にある重複したデーターのセルを削除したいのですが、A列は同一なのですがB列は異なっています。B列に数字が入っているセルとうでないセルがあるのですが、数字が入っているものを残したいのです。 具体例は次のとおりです。 A列に 「ホンダCIVIC」 B列 「-」と書かれた行と A列に 「ホンダCIVIC」 B列 「2」と書かれた行、 A列に 「ホンダCIVIC」 B列 「5」と書かれた行、 のA列だけを見ると重複した3行が有ったとします。 B列に「5」または「2」の入った行ひとつだけ残し、他を削除したいのです。 何かよい方法があればお教えください。よろしくお願いします。