2

私はhttp://www.cplusplus.com/forum/beginner/73928/で定義されているものElemとまったく同じクラスを持っていますList

trueすべての値が 2 回以上繰り返された場合に返す関数を作成する方法について、いくつかのヒントを提案できますか? 例えば

1,1,1,2,2 - true
1,2 - false

確かに動的配列が必要になると思いますが、アルゴリズムは考えられません。

4

3 に答える 3

2

はい、std::map<int,int>リスト内の各番号の出現回数をカウントする場所を作成します。この計算では、すべてのリストに対して 1 回のパスが必要です。

その後、std::map作成したばかりの をもう一度パスして、すべての値が 2 以上かどうかを調べます。

于 2013-03-19T12:57:51.547 に答える
0

関数は次のようになります(テストされていません):

  std::map<int,int> m_mapCount;
  std::map<int,int>::iterator m_Iterator;

  for (l.start(); !l.end(); l.next()) // put the content of your linkedlist to map
  {
       m_mapCount[l.current->num] += 1;
  }

  for (m_Iterator=m_mapCount.begin(); m_Iterator!=m_mapCount.end(); m_Iterator++)
  {
      if(m_Iterator->second >= 2) return true;
  }
于 2013-03-19T13:22:55.337 に答える
0
bool twoormore()
    {
        int count = 0;// for counting elements in list
        int temp;// temprorary element for sorting and logical part
        int cik;// how much times the value has been mentioned
        bool res = true;// function result
        int * arr;// pointer for the upcoming dynamic array
        for(start();!end();next())
        {
            count++;// counting the elements

        }
        if(count != 0){
            arr = new int[count];//creating array
            int i = 0;
            for(start();!end();next())
            {
                arr[i++] = current->num;//filling array
            }
            /** array sorting **/
            for(int i = 0;i < count;i++)
                for(int j = 0; j < count; j++)
                {
                    if(arr[j] > arr[i])
                    {
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            /** sort ends **/
            temp = arr[0]; // setting first element ar temp.. for upcoming check
            cik = 1;// it's been its first time
            for(int i = 1;i < count;i++)
            {
                if(arr[i] == temp)
                {
                    cik++; continue;// if upciming element is equal to temprorary , then add 1 to counter.. and continue looping
                }else
                {
                    if(cik > 1)
                    {
                        temp = arr[i];// if everything ok, but element value changes.
                        cik = 1;// sets defualt
                        continue;
                    }
                    else
                    {
                        res = false;// other way, the value wasnt there two times
                        break;
                    }
                }


            }
            delete arr;//deleting allocated space for array
            return res;// returning bool, true or false.
        }
    }
于 2013-03-19T13:34:30.230 に答える