プロが教える店舗&オフィスのセキュリティ対策術

データを作るプログラムで、配列の重複を削除したいのです。
配列の中身は乱数を発生させることで作ります。

内容は、

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)は重複しているので一方を削除
*()はつけない

です。
プログラミング初心者なので、全くわかりません。
よろしくお願いします。

A 回答 (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;
}
 
    • good
    • 0

順序を保存する必要がないのであれば...



1. 比較用のファンクタを適切に作る。
2. 配列の全要素を、1.で作ったファンクタを指定したstd::setにinsertする。
3. std::setの全要素を洗い出す。

または、

1. 比較用のファンクタを適切に作る。
2. 1.で作ったファンクタを用いて配列を整列する。
3. std::uniqueまたはstd::unique_copyで重複要素を取り除く

型とかまったくわかりませんが、そんなときはジェネリックプログラミングの出番です。

> プログラミング初心者なので、全くわかりません。

がんばりましょう。
    • good
    • 1

>プログラミング初心者なので、全くわかりません。


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

そもそも
>よろしくお願いします。
何をよろしくお願いされたのかもわからないです(笑)
    • good
    • 0

情報が圧倒的に不足しています。


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

う~ん・・・。

書いてあることの意味がイマイチよく分からないのですが・・・。

二次元配列をやる前に、一次元配列でやってみては?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!