C言語:a+b ≤ n かつ a+b が x で割り切れるときの「a」の値をすべて出力する方法
この記事では、「a + b ≤ n」かつ「a + b が x で割り切れる」という2つの条件を同時に満たす「a」の値を求める方法を解説します。
具体的には、b、x、n の3つの値が与えられたとき、次の条件に当てはまるすべての a を出力するプログラムを作成します。
- a + b が n 以下であること
- a + b が x で割り切れること(x の倍数であること)
アルゴリズム
手順は以下の通りです。
START
Step 1 -> 変数 b=10、x=9、n=40、flag=0、divisible を宣言する
Step 2 -> divisible = (b / x + 1) * x から開始し、
divisible <= n の間、divisible += x ずつ繰り返す
IF divisible - b >= 1
divisible - b の値を出力する
flag=1 を設定する
End
END
STOP
ポイントとなる考え方
このプログラムの鍵となるのは、式「(b / x + 1) * x」です。これにより、b より大きい最小の x の倍数が求まります。あとは、その倍数から n 以下の範囲内で x ずつ増やしながらループを回し、各倍数から b を引いた値(=条件を満たす a)を出力していきます。
サンプルコード(C言語)
#include <stdio.h>
int main(int argc, char const *argv[]) {
int b=10, x=9, n=40, flag = 0;
int divisible;
for (divisible = (b / x + 1 ) * x ; divisible <= n; divisible += x) {
if ( divisible - b >= 1) {
printf("%d ", divisible - b );
flag = 1;
}
}
return 0;
}
実行結果
上記のプログラムを実行すると、次のような出力が得られます。
8 17 26
実行結果の解説
今回の例では、b=10、x=9、n=40 が設定されています。b を超える最小の 9 の倍数は 18 なので、ループでは 18、27、36 が候補となります。それぞれから b(=10)を引くと、8、17、26 が出力されます。
これらの値はいずれも「a + b が 9 の倍数であり、かつ 40 以下である」という条件を正しく満たしていることが確認できます。
-
C言語で左矢印パターンと右矢印パターンを出力するプログラム
プログラムの概要 このプログラムは、C言語を使って星(*)で構成された左矢印パターンと右矢印パターンをコンソールに出力します。ユーザーが行数を入力すると、その行数に応じた矢印の形が表示されます。for文の入れ子(二重ループ)の動きを学ぶのに最適な題材です。 アルゴリズム まず、矢印パターンを出力するための行数をユーザーから受け取ります。その後、次の手順でパターンを描画していきます。 星(*)で矢印の上半分を出力する 星(*)で逆右三角形を出力する 星(*)で矢印の下半分を出力する 星(*)で右三角形を出力する 左矢印パターンのロジック 左矢印パターンは2つのループで構成されます。前半のループ
-
C言語で配列の下三角行列と上三角行列を出力するプログラム
プログラムの説明 本記事では、入力された配列(行列)から下三角行列と上三角行列を出力するC言語のプログラムを紹介します。 三角行列とは 三角行列とは、下三角行列または上三角行列のいずれかに該当する行列の総称です。 下三角行列 正方行列において、主対角線より上側のすべての要素が0である行列を「下三角行列」と呼びます。 上三角行列 正方行列において、主対角線より下側のすべての要素が0である行列を「上三角行列」と呼びます。 次のような形状を持つ行列は下三角行列(左三角行列)と呼ばれます。 $${\displaystyle L={\begin{bmatrix}\ell _{1,1}&&&&0\\\e