2016-05-06 8 views
0

ダイナミックアレイに問題があります。私が書いたコードは、コインの数を入力し、1が含まれているかどうかを確認することです。配列に含まれていない場合は、配列に1が含まれます。しかし、配列のサイズは固定されているので、他の数値を入力したまま配列のサイズを変更することはできません。どのように私の配列を台無しにすることなくこれを行うことができますか?ダイナミックアレイとそれが特定の番号を持っているかどうかをチェックする方法

#include <iostream> 

using namespace std; 

int main() 
{ 
    int N,coin; 
    cout << "Enter the value N to produce: " << endl; 
    cin >> N; 
    cout << "Enter number of different coins: " << endl; 
    cin >> coin; 
    int *S = new int[coin]; 
    cout << "Enter the denominations to use with a space after it" << endl; 
    cout << "(1 will be added if necessary): " << endl; 
    for(int i = 0; i < coin; i++) 
    { 
     cin >> S[i]; 
     if(S[i] != 1) 
      S[coin] = 1; // confused at this part of how to set the last element to 1 
     cout << S[i] << endl; 
    } 
    //system("PAUSE"); 
    return 0; 
} 
+0

です。入力された数値のいずれも1でないと仮定します。値の1つを上書きするか、配列のサイズを1増やすかの2つの選択肢があります。 – karakfa

+0

これは問題です:/ iは値を上書きせずに配列のサイズを作成したいしかし、1が既に含まれている場合は、配列を1増やす必要はありません。 – Darkflame

答えて

1

はあなたの条件付き論理矛盾がある擬似コード/コメント

bool hasOne; 
for(int i = 0; i < coin; i++) { 
     cin >> S[i]; 
     if(S[i] == 1) hasOne = true; 
} 
if(!hasOne) { 
    // create a new array size one more than S 
    // copy elements from S to the new array 
    // set the last element to 1 in the new array 
    // assign the new array to S 
    } 
+0

を追加してください。 – Darkflame

0

アレイの最後に1を追加する必要がありますか?もしそうなら、あなたが動的にメモリを割り当てるためにはmalloc()を使用する必要があるの配列を使用する必要がある場合、私は配列

#include <vector> 

vector<int> S; 

for(int i = 0; i < coin; i++) 
    { 
     cin >> S[i]; 
     if(S[i] != 1) 
      S.push_back(1); 
     cout << S[i] << endl; 
    } 

の代わりにのstd ::ベクトルオブジェクトを使用します。しかし、あなたはC++ std :: vectorを使用しているので、行く方法です。ここ

+0

hmm配列の末尾にある必要はありません。配列のどこにでも置くことができます。 – Darkflame

+0

S.push_back(1)will will。それが呼び出されるたびにベクトルサイズを1ずつ増加させるベクトルに1を追加します。あなたのループには論理的な欠陥があります。 1.入力データを収集してベクトルに格納します。 2.ベクトルデータをループし、1の を確認します。3. 1つのブール値フラグを見つけたら、ループから抜け出します。 4フラグが設定されていない場合は、push_back()を使用して1 –

関連する問題