C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++入門】一方の配列の全要素を、もう一方の配列の要素の積で割る方法

このチュートリアルでは、一方の配列の各要素を、もう一方の配列の全要素の積で割るC++プログラムを作成します。

ここでは、問題をシンプルな手法で解いていきます。まずは解決までの手順を確認しましょう。

解き方の手順

  • 2つの配列を初期化します。

  • 2つ目の配列を走査し、全要素の積を求めます。

  • 1つ目の配列を走査し、各要素をその積で割ります。

実装例

それでは、実際のコードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
void divideArrOneWithTwo(int arr_one[], int arr_two[], int n, int m) {
    int arr_two_elements_product = 1;
    for (int i = 0; i < m; i++) {
        if (arr_two[i] != 0) {
            arr_two_elements_product = arr_two_elements_product * arr_two[i];
        }
    }
    for (int i = 0; i < n; i++) {
        cout << floor(arr_one[i] / arr_two_elements_product) << " ";
    }
    cout << endl;
}
int main() {
    int arr_one[] = {32, 22, 4, 55, 6}, arr_two[] = {1, 2, 3};
    divideArrOneWithTwo(arr_one, arr_two, 5, 3);
    return 0;
}

出力結果

上記のコードを実行すると、次のような結果が得られます。

5 3 0 9 1

コードのポイント

このプログラムでは、2つ目の配列 {1, 2, 3} の全要素の積である「6」を先に計算しています。その後、1つ目の配列の各要素(32, 22, 4, 55, 6)を6で割り、小数点以下を切り捨てた値を出力します。

また、2つ目の配列に「0」が含まれている場合は、積の計算から除外する処理が組み込まれています。これにより、意図しないゼロ除算による計算結果の崩れを防いでいます。

ただし注意点として、2つ目の配列のすべての要素が「0」だった場合、積が1のまま残るため、実質的に元の配列がそのまま出力されることになります。実際の開発では、このようなケースに対するエラーハンドリングを追加することをおすすめします。

まとめ

本記事では、配列同士の除算処理を「積を先に求めてから一括で割る」という効率的なアプローチで実装しました。計算量はO(n + m)と非常にシンプルで、実用的なテクニックです。チュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。

  1. 配列の全要素を乗算するC++プログラムの解説

    整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭

  2. C++入門:ポインタを使って配列の要素にアクセスする方法

    ポインタとは、変数のメモリ上の位置(アドレス)を格納するための特殊な変数です。言い換えれば、ポインタは特定のメモリ位置を参照しており、そのメモリ位置に格納された値を取得することを「デリファレンス(間接参照)」と呼びます。まずは、ポインタを使用して配列の単一の要素にアクセスする基本的なプログラムを見てみましょう。例1:配列の1つの要素にアクセスする#include <iostream> using namespace std; int main() {     int arr[5] = {5, 2, 9, 4, 1};