2

単純な方法は、範囲を線形に反復し、範囲内の各数値を乗算することです。

例: 配列: {1,2,3,4,5,6,7,8,9,10}; インデックス 3 からインデックス 8 を 2 で乗算します。1 ベースのインデックスを想定しています。

結果配列は次のようになります: {1,2,6,8,10,12,14,16,9,10};

「合計」部分にバイナリ インデックス ツリーを使用できることはわかっています。特定の範囲を数値で効率的に乗算するにはどうすればよいですか?

4

5 に答える 5

1

C++11線形アプローチに従って、次のようにコーディングできます

std::array<int, 10> nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::for_each(nums.begin() + 2, nums.begin() + 8, [](int & n) { n *= 2; });
for (int & n : nums) std::cout << n << " ";

出力

1 2 6 8 10 12 14 16 9 10 
于 2015-07-06T08:36:04.117 に答える