2017-06-17 12 views
1

(これがひどくフォーマットされている場合は申し訳ありません。私は前に掲示たことがありません。)アレイの検索とユニークな付加価値

私は数時間のクラスのためのプログラムに取り組んできたと私は理解することはできません私が自分が望むことができるようにするためには、自分の仕事に必要なこと。最終結果は、addUniqueがそれ自身のリストに一意の入力を追加するということです。

#include <iostream> 
using namespace std; 

void addUnique(int a[], int u[], int count, int &uCount); 
void printInitial(int a[], int count); 
void printUnique(int u[], int uCount); 

int main() { 
    //initial input 
    int a[25]; 
    //unique input 
    int u[25]; 
    //initial count 
    int count = 0; 
    //unique count 
    int uCount = 0; 
    //user input 
    int input; 

    cout << "Number Reader" << endl; 
    cout << "Reads back the numbers you enter and tells you the unique entries" << endl; 
    cout << "Enter 25 positive numbers. Enter '-1' to stop." << endl; 
    cout << "-------------" << endl; 
    do { 
     cout << "Please enter a positive number: "; 
     cin >> input; 
     if (input != -1) { 
      a[count++] = input; 
      addUnique(a, u, count, uCount); 
     } 
    } while (input != -1 && count < 25); 

    printInitial(a, count); 
    printUnique(u, uCount); 

    cout << "You entered " << count << " numbers, " << uCount << " unique." << endl; 
    cout << "Have a nice day!" << endl; 

} 

void addUnique(int a[], int u[], int count, int &uCount) { 
    int index = 0; 
    for (int i = 0; i < count; i++) { 
     while (index < count) { 
      if (u[uCount] != a[i]) { 
       u[uCount++] = a[i]; 
      } 
      index++; 
     } 
    } 
} 

void printInitial(int a[], int count) { 
    int lastNumber = a[count - 1]; 
    cout << "The numbers you entered are: "; 
    for (int i = 0; i < count - 1; i++) { 
     cout << a[i] << ", "; 
    } 
    cout << lastNumber << "." << endl; 
} 

void printUnique(int u[], int uCount) { 
    int lastNumber = u[uCount - 1]; 
    cout << "The unique numbers are: "; 
    for (int i = 0; i < uCount - 1; i++) { 
     cout << u[i] << ", "; 
    } 
    cout << lastNumber << "." << endl; 
} 

問題は私のaddUnique関数です。私はこのようになりますforループとして前にそれを書いた:

for (int i = 0; i < count; i++){ 
    if (u[i] != a[i]{ 
     u[i] = a[i] 
     uCount++; 
    } 
} 

これが動作しないのはなぜ:uがとても同じ場所であり、uを比較し、空の配列が常にになりますですiの値をuに加える。私が必要とするのは、この関数がすべてをスキャンしてから、それがuに追加すべき一意の値かどうかを決定することです。

誰かが正しい方向に私を指すことができれば、それは非常に高く評価されます。

+0

コード品質のヒント:変数宣言の前にある「//最初の入力」のようなコメントは、変数により良い名前を付ける必要があるという明確な兆候です。 'initial_input'(または' input'のみ)のときに 'a'と呼ぶのはなぜですか? –

+0

素晴らしい点。これは私の最初のコンピュータサイエンスコースであり、私はこれを初めて知りました。アドバイスをいただきありがとうございます。 –

+3

あなたのアルゴリズムは何ですか?つまり、どのようにコードをこの問題に近づけたいのですか?あなたが鉛筆と紙でユニークな要素を見つけようとしていたら、どうしますか? – Beta

答えて

2

あなたの一意性チェックが間違っています...あなたのaddUniqueの定義がそうです。

void addUnique(int value, int u[], int &uCount) 
{ 
    for (int i = 0; i < uCount; i++){ 
    if (u[i] == value) 
     return; // already there, nothing to do. 
    } 
    u[uCount++] = value; 
} 
関連する問題