2016-12-18 14 views
-2

たとえば、私はA [1 2 3 4 5 6] を持っていて、偶数を配列に入れたいと思います。 。C++配列内の数値が偶数か奇数かを調べる方法

私はこのようなことはできないと思いますか?

for(i=1;i<=n;i++){ 
    if(a[i]%2!=0){ 
     b[j]=a[i]; 
     j++; 
    }else{ 
     c[k]=a[i]; 
     k++; 
    } 
} 

私は試しても機能しませんでした。 はお時間をいただき、ありがとうございます:) 私の全体のコードはこれです:

int a[50],i,b[50],c[50],k,j,n; 
    cout<<"n= ";cin>>n; 
    for(i=1;i<=n;i++){ 
     cout<<"a["<<i<<"]: "; 
     cin>>a[i]; 
    } 

    cout<<"\na[ "; 
    for(i=1;i<=n;i++){ 
     cout<<a[i]<<" "; 
    } 
    cout<<"]"; 

    for(i=1;i<=n;i++){ 
     if(a[i]%2!=0){ 
      b[j]=a[i]; 
      j++; 
     }else{ 
      c[k]=a[i]; 
      k++; 
     } 
    } 

    cout<<"\nb[ "; 
    for(i=1;i<=j;i++){ 
     cout<<b[i]<<" "; 
    } 
    cout<<"]"; 

    cout<<"\nc[ "; 
    for(i=1;i<=k;i++){ 
     cout<<c[i]<<" "; 
    } 
    cout<<"]"; 

そして、私はindividualy配列の各数を取ることができますどのように私の他の質問です。私は数字の1が奇数ならばあなたがで番号をかどうかを確認することができ、別の与えられた数

+1

私はあなたがパリティをチェックしていると確信しています。私が知る限り、負の数は 'a [i] <0'です。また、「それはうまくいかない」という意味ですか? – kabanus

+0

あなたのコードでは、数字が奇数か '%2'を使用しているかどうかを調べています。 '>または' ' –

+0

" C + +を使用したい場合配列内の数値が有限であるか否かを調べる方法配列内にあるために数値の符号は変わりません。したがって、数値が正か負かを示す関数を記述します。このような関数をテストするのは非常に簡単です。 – juanchopanza

答えて

0

で割り切れるかどうかを確認したい最初の部分で 同様:

したがって
if (x % 2) { 
    cout << "x is odd" << endl; 
} 

、最終的なコードは次のようになります。

int N = 20; // array length 
odd_arr[N], even_arr[N], odd_idx = 0, even_idx = 0; 

for (int i = 0; i < N; i++) { 
    if (A[i] % 2) { // odd 
     odd_arr[odd_idx] = A[i]; 
     odd_idx++; 
    } else { // even 
     even_arr[even_idx] = A[i]; 
     even_idx++; 
    } 
} 
+0

私はまったく同じことをしました。大きな数字が表示されています(私はASCIIコードだと思います)。 – Roland

+0

1 2 3 4 5と書くと、次のように表示されます。A [1 2 3 4 5] B [3 5 4732380] C [4 2000425106] – Roland

+0

コードで 'j'と' k'を起動しませんでした。試してみましょう: 'j = 1; k = 1; 'を使用します。 – Dulguun

0

まず:あなたはjkを初期化していないので、あなたはb[]に数値を格納するときとc[]あなたはおそらくそのまたはかもしれないかもしれ未定位置にそれらを保存することがされています配列内には存在しないため、未定義の動作が発生します。

2番目:あなたのforループから判断すると、C++の配列は要素1から始まり、実際に要素0で始まると仮定しているようです。これは、nの値を選択する限り、プログラムを傷つけることはありませんあなたがC++で(どこでも)

for(int i=0; i<n; i++) 

が必要

1

代わりの

for(i=1;i<=n;i++) 

49よりも大きくない、インデックスは0から開始し、ループ変数は通常ループ内で宣言されます。

さらに、jとkを初期化する必要があります。 int j = 0、k = 0;あなたはi<ji<kを必要とし、最終的なループで

int j=0, k=0; 
for(int i=0; i<n; i++) { 
    if(a[i]%2!=0){ 
     b[j]=a[i]; 
     j++; 
    }else{ 
     c[k]=a[i]; 
     k++; 
    } 
} 

、jおよびkは、あなたが配列に何かを書いた最後の時間が経過した後にインクリメントされるため:それらが必要なときに最後に、C++で、変数は通常、宣言されている

おそらく、最後に「\ n」と書かれた< <が必要です。

+0

ありがとう、ありがとう。私はあなたの助けを借りてそれを理解しました! – Roland

関連する問題