2012-04-25 19 views
0

私はプログラミングプロジェクト(mancala)に取り組んでいて、配列を書くときに立ち往生してしまった。私は、この行は、最初に初期化これまでのところ、私は唯一の配列を同じ値で塗りつぶし、値をリセットしてループする

{

int i; 
    int beadArray[MAX] = {4}; 

    for (i = 0; i < MAX; i++) 
    { 
      beadArray[i] = -1; 
    } 

    for (i = 0; i < MAX; i++) 
    { 
      cout<<i<<"\t"; 

    } 
+0

ちょうど2の場合、そのインデックスにアクセスして** ** **を直接割り当てることはできません。とにかく、塗りつぶす必要がある配列のインデックスが連続している場合は、 'std :: fill'を使うことができます。しかし、私は彼らが2つの配列要素であるので、前のやり方で行うことを好む。 – Mahesh

答えて

1
int beadArray[MAX] = {4}; 

を持っている4の値を持つすべてのボードビンを満たす配列を記述する必要があり、その後、0に2つのビンをリセット4.

〜4要素、および0に残り、ないそれらのすべて

ベクターを使用して、何かが将来的に扱いやすいと良いでしょう:

std::vector<int> beadArray (MAX, 4); //MAX elements, initialized to 4 
beadArray [indexToReset1] = 0; //reset one element 
beadArray [indexToReset2] = 0; //reset other element 

//print array - C++11 
for (int bead : beadArray) 
    cout << bead << '\t'; 

//print array - C++03, consider using std::for_each instead 
for (vector<int>::const_iterator it = beadArray.begin(); it != beadArray.end(); ++it) 
    cout << *it << '\t'; 

非ベクター溶液:ベクターなし

、STLのagorithmsがまだ使用可能である。

int beadArray [MAX]; 

std::fill (beadArray, beadArray + MAX, 4); 
beadArray [6] = beadArray [13] = 0; //just the two elements 
std::fill (beadArray + 6, beadArray + 13, 0); //the range of elements from 6-13 

のostreamイテレータを使用することであろう配列を印刷する幾分より賢い方法。

std::copy (beadArray, beadArray + MAX, std::ostream_iterator<int> (std::cout, "\t")); 

単なるC++:

int beadArray [MAX]; 

for (int i = 0; i < MAX; ++i) 
    beadArray [i] = 4; //set every element to 4 

beadArray [6] = beadArray [13] = 0; //set elements 6 and 13 to 0 

for (int i = 0; i < MAX; ++i) 
    cout << beadArray [i] << '\t'; //print each element separated by tabs 
+0

ベクトルを使用したくないと仮定します。すべての値を4で入力してから、ループを使用して位置6と13を0で埋めたいとします。 – chrisvx930

+0

@ chrisvx930、私はベクトルを使用しないように答えを更新しました。それはあなたの人生を楽にするための仕事であるアルゴリズムを利用していますので、それらを使用してください! :) – chris

+0

もう一度ありがとう - 問題はできるだけシンプルに保つことです。私は間違いなく初心者で、あなたがこれまで投稿したことを本当に理解できません。あなたが提供してくれた助けには本当に感謝しています。私がこれを簡単な方法で修正できるように助けることができれば、私はとても感謝しています! – chrisvx930

1

なぜループを使用してインデックス6と13を入力するように指定していますか? 2つの値を入力するだけであれば、ループは必要ありません。

これはmancalaゲームのためだけであるため、255より大きい数値(1バイトが保持できる最大値)を使用する必要がない場合は、unsigned char配列とmemsetを使用できます。

char beadArray[MAX]; 
memset(beadArray, 4, sizeof(beadArray)); 
beadArray[6] = beadArray[13] = 0; 
for(int i = 0; i < sizeof(beadArray); i++) 
    cout << beadArray[i] << "\t"; 
関連する問題