内箱の中心を見つけるためのC++コード
サイズnxmの行列があるとします。セルは、白の「W」または黒の「B」のいずれかです。奇数の長さのテーブル内のいくつかの正方形は黒く塗られていました。この正方形の中心を見つける必要があります。
したがって、入力が次のような場合
W | W | B | B | B | W |
W | W | B | B | B | W |
W | W | B | B | B | W |
W | W | W | W | W | W |
W | W | W | W | W | W |
その場合、出力は(3、1)になります。
ステップ
これを解決するには、次の手順に従います-
n := row count of matrix m := column count of matrix cnt := 0 X := 0 Y := 0 for initialize i := 0, when i < n, update (increase i by 1), do: for initialize j := 0, when j < m, update (increase j by 1), do: if matrix[i, j] is same as 'B', then: increase cnt by 1 X := X + i Y := Y + j X := X / cnt Y := Y / cnt return (Y, X)
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void solve(vector<vector<char>> matrix){ int n = matrix.size(); int m = matrix[0].size(); int cnt = 0, X = 0, Y = 0; for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++) if (matrix[i][j] == 'B') cnt++, X += i, Y += j; } X /= cnt; Y /= cnt; printf("%d, %d\n", Y, X); } int main(){ vector<vector<char>> matrix = { { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' } }; solve(matrix); }
入力
{ { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' } }
出力
3, 1
-
バッテリーコンボの数を調べるためのC++コード
最大5回使用できるバッテリーがn個あるとします。 3つのバッテリーを必要とするデバイスがいくつかあり、デバイスを使用するたびにバッテリーの使用数が1つ増えます。デバイスをk回使用する必要がある場合、デバイスに電力を供給するためにいくつのバッテリーの組み合わせを作成できるかを調べる必要があります。 2台の機器で同時に使用することはできません。また、5回使用した電池を含めることはできません。バッテリーの使用回数はアレイバットに記載されています。 したがって、入力がn =6、k =2、batt ={2、4、4、2、1、3}のような場合、出力は1になります。 k回デバイスに電力を供給するために作成
-
C++で順列を見つける
文字「D」と「I」で構成される秘密の署名があるとします。 「D」は2つの数値間の減少関係を示し、「I」は2つの数値間の増加関係を示します。そして、秘密の署名は、1からnまでのすべての異なる数を一意に含む特別な整数配列によって構築されました。 たとえば、秘密の署名「DI」は、[2,1,3]や[3,1,2]のような配列から構築できますが、[3,2,4]や[2、 1,3,4]、どちらも「DI」シークレット署名を表すことができない特殊な文字列を構成する違法です。 ここで、入力内の指定された秘密の署名を参照できる[1、2、...n]の辞書式最小の順列を見つける必要があります。 したがって、入力が「