Cで購入できるキャンディーの最大数
タイプi(0 <=X [i] <=candies [i])のX [i]を購入する場合、すべてのj(1 <=j <=i)について、少なくとも次の条件のいずれかが真でなければなりません。
-
X(j)
-
X(j)=0、タイプjのキャンディーは購入していません
例を挙げて理解しましょう。
入力 − arr []={1,3,5,2,6,7}。
出力 −購入できるキャンディーの最大数− 16
説明 −タイプiで購入したキャンディー{0,3,5,2,6,0}
入力 − arr []={5,7,7,3,4}。
出力 −購入できるキャンディーの最大数− 10
説明 −タイプiで購入したキャンディー{0,0,7,3,0}
以下のプログラムで使用されているアプローチは次のとおりです
-
整数配列candies[]は、タイプiのキャンディーの数を格納するために使用されます。
-
可変の「サイズ」は、アレイキャンディーの長さを格納します。
-
関数maxCandies(int arr []、int n)は、購入できるキャンディーの総数を返すために使用されます。
-
まず、最後の種類のキャンディーを購入したとします。 Buyed =arr [n-1]
-
最後から2番目の要素から開始して、for(i =n-2; i> =0; i-)
-
変数xは、購入できる現在のタイプのキャンディーの量を格納します。 x =arr[i]またはbuyed-1のいずれか少ない方。
-
xがzeo以外の場合は、これを合計に追加します。
-
合計が以前に購入した値よりも多い場合は、buyed=xです。
-
購入した結果を返します。
例
#include <stdio.h> int maxCandies(int arr[], int n){ int bought = arr[n - 1]; int total = bought; // Starting from second last for (int i = n - 2; i >= 0; i--) { // Amount of candies of the current // type that can be bought int x = arr[i]<bought-1?arr[i]:bought-1; if (x >= 0) { total += x; bought = x; } } return total; } int main(){ int candies[] = { 1,2,4,3,7 }; int size = 5; printf("Total Candies that can be bought: %d", maxCandies(candies, size)); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Total Candies that can be bought: 13
-
C++でN*Nチェス盤に配置できる最大のビショップ
チェス盤のサイズを示す入力Nが与えられます。ここでのタスクは、Nの任意の値について、2人のビショップが互いに攻撃できないようにNXNチェス盤に配置できるビショップの数を見つけることです。例を挙げて理解しましょう。 入力 − n =2 出力 − N * Nチェス盤に配置できる最大のビショップ− 2(上記のように) 説明 −上に示したように、矛盾しない位置は司教が配置されている場所だけです。せいぜい2X2チェス盤のビショップ。 入力 − n =5 出力 − N * Nチェス盤に配置できる最大ビショップ:8(上記のように) 以下のプログラムで使用されているアプローチは次のとおりで
-
C++で直角二等辺三角形に収まる正方形の最大数
与えられたタスクは、底辺が「s」の二等辺三角形の中に収まる、辺が「a」の正方形の最大数を見つけることです(二等辺三角形には少なくとも2つの等しい辺があります)。 例を使用して、私たちがしなければならないことを理解しましょう: 入力 s=5, a=1 出力 10 説明 −基数の平方数は、sをaで割り、1を引くことで計算できます。したがって、基数の平方数=5/1 – 1 =4 同様に、下の4つの正方形を配置すると、base(s-a)の新しい二等辺三角形が得られます。次に同じ手順を繰り返して3つの正方形を取得し、1つの正方形が上に配置されるまで続けます。 入力 s=7, a=2 出力