C言語のポインタを使って配列内の完全平方数の合計を求めるプログラム
問題
ポインタを使用して、配列内に含まれる完全平方数(ある整数の2乗になっている数)の要素の合計を求めるプログラムを作成します。
配列の要素数を入力として受け取り、その配列内に存在するすべての完全平方数の要素を合計した結果を出力します。
解法
例えば、以下のような動作になります。
入力 = 1, 2, 3, 4, 5, 9, 10, 11, 16 完全平方数は 1, 4, 9, 16 合計 = 1 + 4 + 9 + 16 = 30 出力:30
アルゴリズム
ポインタを使用して配列内の完全平方数の要素の合計を求めるためのアルゴリズムは、以下の手順に従います。
ステップ1 − 実行時に入力として配列の要素数を読み込みます。
ステップ2 − 配列の各要素を入力します。
ステップ3 − 合計を格納する変数sumを宣言し、0で初期化します。
ステップ4 − ポインタ変数を宣言します。
ステップ5 − ポインタ変数を使って、配列の各要素が完全平方数かどうかを判定します。
ステップ6 − 要素が完全平方数であれば、sum = sum + その要素 の計算を行います。
ステップ7 − 最終的な合計値を返します。
サンプルコード
以下は、ポインタを使用して配列内の完全平方数の要素の合計を求めるCプログラムです。ここでは、mallocによる動的メモリ確保で配列を生成し、sqrt関数で平方根を求めて元の値と比較することで、完全平方数かどうかを判定しています。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int sumPositive(int n,int *a){
int i,sum=0,m;
for(i=0;i<n;i++){
m=sqrt(*(a+i));
if(pow(m,2)==*(a+i)){
sum+=*(a+i);
}
}
return sum;
}
int main(){
int i,*a,n;
printf("Enter the size of array:\n");
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int));
printf("Enter the elements of array:\n");
for(i=0;i<n;i++){
scanf("%d",a+i);
}
printf("Sum of positive square elements is %d",sumPositive(n,a));
return 0;
}
出力
上記のプログラムを実行すると、以下のような出力が得られます。
Enter the size of array: 10 Enter the elements of array: 1 2 3 4 5 6 7 8 9 10 Sum of positive square elements is 14
この例では、入力された1〜10の中で完全平方数となるのは「1」「4」「9」の3つだけなので、合計は 1 + 4 + 9 = 14 となります。*(a+i)のようにポインタ演算を用いて配列の各要素にアクセスしている点が、このプログラムのポイントです。
-
Pythonで配列の合計を求める方法を徹底解説
この記事では、Pythonを使って配列(リスト)の合計を求める方法について詳しく解説します。 問題文 問題: 配列が与えられたとき、その配列に含まれるすべての要素の合計を計算してください。 最も基本的なアプローチは、配列全体を走査し、各インデックスの要素を順番に加算していく方法です。ここでは、まず組み込み関数を活用したシンプルな実装例を見ていきましょう。 方法1:組み込み関数 sum() を使う Pythonには、イテラブルなオブジェクトの合計を一発で計算できる組み込み関数 sum() が用意されています。これを使えば、コードは非常に簡潔になります。 サンプルコード # 合計を求める関数 de
-
Pythonで配列(リスト)の合計を求める方法をわかりやすく解説
この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に