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

男子・女子学生の点数の合計を求めるCプログラム

問題の概要

marksという配列にいくつかの点数が格納されているとします。偶数インデックス(marks[0]、marks[2]など)には男子学生の点数が、奇数インデックスには女子学生の点数が入っています。さらに、genderという入力があり、その値は「b」または「g」のいずれかです。「b」が渡された場合は男子学生の点数の合計を、「g」が渡された場合は女子学生の点数の合計を返す必要があります(配列のサイズはNとします)。

たとえば、入力が N = 9、marks = [8,5,2,6,7,5,9,9,7]、gender = 'g' の場合、出力は25になります。これは、女子の点数である 5 + 6 + 5 + 9 = 25 となるためです。

解法のアプローチ

この問題を解くには、以下の手順に従います。

  • 女子の合計を表すg_sumと、男子の合計を表すb_sumをそれぞれ0で初期化します。
  • iを0からn-1まで1ずつ増やしながらループします。
    • iを2で割った余りが1(奇数インデックス)の場合:g_sumにmarks[i]を加算します。
    • それ以外(偶数インデックス)の場合:b_sumにmarks[i]を加算します。
  • genderが「b」と等しい場合はb_sumを返します。
  • そうでなければg_sumを返します。

実装例

理解を深めるために、以下の実装例を見てみましょう。

#include <stdio.h>
#define N 9
int solve(int marks[], int n, char gender){
    int g_sum = 0;
    int b_sum = 0;
    for(int i = 0; i < n; i++){
        if(i % 2 != 0){
            g_sum += marks[i];
        }else{
            b_sum += marks[i];
        }    
    }
    if(gender == 'b')
        return b_sum;
    return g_sum;
}
int main(){
    int marks[N] = {8,5,2,6,7,5,9,9,7};
    char gender = 'g';
   
    int sum = solve(marks, N, gender);
    printf("%d", sum);
}

入力

{8,5,2,6,7,5,9,9,7}, 'g'

出力

25

計算量の評価

このアルゴリズムは配列を一度だけ走査するため、時間計算量はO(N)です。また、合計を保持するために使用する変数は定数個のみなので、空間計算量はO(1)となります。配列のサイズが大きくなっても効率的に動作する、シンプルで実用的な解法です。

  1. C言語でアームストロング数を判定するプログラムの作成方法

    アームストロング数とは? 本記事では、入力された整数 n がアームストロング数(Armstrong number)であるかどうかを判定するCプログラムについて解説します。 アームストロング数とは、各桁の数字をそれぞれ「桁数(位数)」でべき乗し、その総和が元の数値と等しくなる数のことです。例えば、4桁の数 1634 は 14 + 64 + 34 + 44 = 1 + 1296 + 81 + 256 = 1634 となるため、アームストロング数です。 アームストロング数を求める基本的な考え方は、次の式のように表せます。 計算式: wxyz…. = pow(w, n) + pow(x, n) + p

  2. 【初心者向け】長方形の面積と外周を求めるC言語プログラムの書き方

    長方形の「長さ」と「幅」が与えられたとき、その面積と外周(周囲の長さ)を計算する方法を、C言語のサンプルコード付きでわかりやすく解説します。 長方形とは? 長方形とは、4つの辺と4つの直角(90度)を持つ2次元の図形です。長方形では、隣り合う辺の長さは異なりますが、向かい合う辺どうしは必ず同じ長さになります。また、2本の対角線も互いに等しい長さを持ちます。 下の図は長方形を模式的に表したものです。 ここで、Aは長方形の幅(breadth)、Bは長さ(length)を表しています。 面積と外周の計算式 面積の公式 長方形の面積は、次の式で求められます。 面積 = 長さ × 幅 外周の公式