0

このプログラムの目的は、配列から重複を削除することです

ユーザーから 10 個の整数の配列を入力し、重複する配列要素を削除するプログラムを作成します。

出力例を次に示します: 10 個の整数を入力し、それぞれの後にリターン キーを押してください: 5 75 10 75 5 80 10 5 5 50 5 つの一意の数字を入力しました: 5 75 10 80 50

ここに私のコードがあります

#include <iostream>
using namespace std;

int main()
{
int myint[11];
int i,x,count=10;

cout << "Please input 10 integers, hitting return after each one \n";
    for(i=0;i<10;i++){
    cin>> myint[i];
    }

    for(i=0;i<=10;i++)
    {
            for(x=i+1;x<=10;x++)
            {
                    if(myint[x]==myint[i])
                    {
                            count--;
                            for(i=x;i<=count;i++)
                            { myint[i] = myint[i+1];
                            }
                    }
            }

      }
cout << endl;
cout << " You entered "<< count << " unique numbers: " <<  endl;

    for(i=0;i<count;i++){
    cout << myint[i] << " ";
    }
return 0;
}

これが私の出力です 10個の整数を入力してください。それぞれの後にリターンを押してください 5 75 10 75 5 80 10 5 5 50

7 つの一意の番号を入力しました: 5 75 10 75 80 10 5

重複は削除するか上書きする必要があり、一意の番号は画面に表示するだけでなく、新しい配列に配置する必要があります。私のエラーがどこにあるのか完全にはわかりません。ループが最初に実行されたとき、何があっても重複を見つけて、配列内の残りのループをスローしているように見えますか? 私はちょっと迷っています。どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

3

質問には C++ のタグが付けられているため、コードで C++ のイディオムを使用することもできます。重い物sortunique持ち上げる。

#include <iostream>
#include <vector>
using namespace std;

int main(int argc, const char * argv[])
{
   vector<int> v;

   cout << "Please input 10 integers, hitting return after each one \n";
   for( int i = 0; i < 10; i++ ) {
      int num;
      cin >> num;
      v.push_back(num);
   }

   sort( v.begin(), v.end() );
   v.erase( unique( v.begin(), v.end() ), v.end() );

   cout << endl << " You entered " << v.size() << " unique numbers: " <<  endl;
   copy( v.begin(), v.end(), ostream_iterator<int>( cout, " " ) );
}
于 2013-05-07T23:14:09.437 に答える
2

@chrのソリューションで言及したセットを使用したソリューションは次のとおりです。

#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>

using namespace std;

int main(int argc, const char* argv[])
{
   set<int> s;

   cout << "Please input 10 integers, hitting return after each one \n";
   for( int i = 0; i < 10; i++ ) {
      int num;
      cin >> num;
      s.insert(num);
   }
   cout << endl << " You entered " << s.size() << " unique numbers: " <<  endl;
   copy( s.begin(), s.end(), ostream_iterator<int>( cout, " " ) );
}
于 2013-05-08T00:11:31.943 に答える
1

最も内側のサイクルは、最も外側のサイクルの変数である i を再利用します。そのためには別の文字を使用してください。

また、10 個の要素を読み取りたい場合、なぜ配列とそれに対応する 11 個のループがあるのか​​ も奇妙です。さらに、ループを <= 10 ではなく < count で制限できます。

于 2013-05-07T22:49:31.703 に答える