C++でN+1日目の降雨確率を計算する方法
0と1が格納された配列が与えられます。ここで、0は雨が降らなかった日、1は雨の日を表します。この記事では、過去のデータをもとにN+1日目(翌日)に雨が降る確率をC++で計算する方法を解説します。
計算式
N+1日目に雨が降る確率は、次のシンプルな式で求めることができます。
確率 = 配列内の雨の日の総数 ÷ 配列内の全日数
入力例と出力例
入力
arr[] = {1, 0, 0, 0, 1}出力
n+1日目の降雨確率 : 0.4
解説
雨の日と雨でない日の合計:5日 1で表される雨の日の数:2日 N+1日目の降雨確率:2 / 5 = 0.4
入力
arr[] = {0, 0, 1, 0}出力
n+1日目の降雨確率 : 0.25
解説
雨の日と雨でない日の合計:4日 1で表される雨の日の数:1日 N+1日目の降雨確率:1 / 4 = 0.25
プログラムのアプローチ
配列の要素を入力として受け取る
1は雨の日を表すものとして扱う
0は雨でない日を表すものとして扱う
上記の計算式を用いて確率を算出する
結果を出力する
アルゴリズム
Start
Step 1→ n+1日目の降雨確率を求める関数を宣言
float probab_rain(int arr[], int size)
float型の count = 0 と a を宣言
ループ For int i = 0 and i < size and i++
IF (arr[i] == 1)
count++ を設定
End
End
a = count / size を設定
return a
Step 2→ main() 内で
int arr[] = {1, 0, 0, 0, 1} を宣言
int size = sizeof(arr) / sizeof(arr[0]) を宣言
probab_rain(arr, size) を呼び出す
Stop実装例
#include <bits/stdc++.h>
using namespace std;
// n+1日目に雨が降る確率を求める関数
float probab_rain(int arr[], int size){
float count = 0, a;
for (int i = 0; i < size; i++){
if (arr[i] == 1)
count++;
}
a = count / size;
return a;
}
int main(){
int arr[] = {1, 0, 0, 0, 1 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"n+1日目の降雨確率 : "<<probab_rain(arr, size);
return 0;
}出力結果
上記のコードを実行すると、以下の出力が得られます。
n+1日目の降雨確率 : 0.4
コードのポイント
このプログラムでは、sizeof(arr) / sizeof(arr[0]) を使うことで配列の要素数を自動的に取得しています。また、確率を小数で正しく表現するために、カウント変数を float 型で宣言している点が重要です。もし count を int 型のまま整数除算を行うと、結果が常に0になってしまうため注意が必要です。
-
C++で解くチェス盤上のナイトが盤内に残る確率の求め方
問題概要 N×Nのチェス盤があるとします。ナイトはr行c列目のマスからスタートし、ちょうどK回の移動を試みます。行と列は0始まりのインデックスで表されるため、左上のマスは(0, 0)、右下のマスは(N-1, N-1)となります。 ナイトは1つのマスから8種類の異なるマスへ移動することができます。その移動パターンは下図の通りです。 ナイトは移動のたびに、8つの可能な移動の中からランダムに1つを選択します。そして、ちょうどK回の移動を完了するか、チェス盤の外に出てしまうまで移動を続けます。この問題では、ナイトが移動を終えた時点で盤上に残っている確率を求めます。 例えば、入力が「3, 2, 0,
-
C++で作る「ハッピー・ウィメンズデイ」出力プログラム
世界中でお祝いされる「女性の日」。この記事では、その祝福メッセージをC++のコンソールプログラムとして出力する方法をご紹介します。記号「#」で描かれた円の中央に「7 Oct」と「Happy Womens Day」の文字列を表示し、さらにその下にはアスタリスク(*)でリボンのような模様を描く構成になっています。 サンプルコード #include <iostream> using namespace std; int main(){ // デザインのサイズを初期化 int n = 5; // 円(デザインの上半分)を描画するループ // 外側のループで高