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

合計がnになる3つの数を見つけるC++プログラム

ある整数 n が与えられたとします。ここで、a + b + c = n を満たし、かつ3つの数 abc のいずれも3の倍数にならないような組み合わせを見つけることを考えます。

例えば、入力が n = 233 の場合、出力は「1, 2, 230」のようになります。実際に確認すると、1 + 2 + 230 = 233 であり、どの数も3の倍数ではありません。

解法のアプローチ

この問題は、以下の手順に従って解くことができます。

if ((n - 2) mod 3 == 0) then:
    return 1, 2, n - 3
otherwise:
    return 1, 1, n - 2

なぜこの方法で正しく動作するのか

(n - 2) が3で割り切れる場合、n - 3 は3で割った余りが2になるため、3の倍数にはなりません。一方、それ以外の場合は n - 2 自体が3の倍数ではないため、そのまま第3の数として利用できます。また、1 は常に3の倍数ではないため、いずれの場合でも条件を満たす組み合わせが得られます。

実装例

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

#include <bits/stdc++.h>
using namespace std;
void solve(int n){
    if ((n - 2) % 3 == 0)
        cout << 1 << ", " << 2 << ", " << n - 3;
    else
        cout << 1 << ", " << 1 << ", " << n - 2;
}
int main(){
    int n = 233;
    solve(n);
}

入力

233

出力

1, 2, 230
  1. 再帰を使用して自然数の合計を求めるC++プログラム

    自然数とは、1から始まる正の整数のことです。自然数の列は以下のように表されます。1, 2, 3, 4, 5, 6, 7, 8, 9, 10……本記事では、再帰(リカージョン)を利用して、最初のn個の自然数の合計を求めるC++プログラムを紹介します。再帰とは、関数が自分自身を呼び出すことで問題を段階的に解決していく手法です。サンプルコード以下は、再帰を使って最初のn個の自然数の合計を計算するC++プログラムの例です。#include <iostream> using namespace std; int sum(int n) {    if(n == 0) &nb

  2. 3つの数字の中から最大値を見つけるC++プログラム

    3つの数値の中から最大のものを求めるには、if文を組み合わせて条件分岐を行うのが基本的な方法です。ここでは、if文を入れ子構造にして最大値を判定するC++プログラムを紹介します。 サンプルコード #include <iostream> using namespace std; int main() {    int a = 5 ,b = 1 ,c = 9;    if(a>b) {       if(a>c)       cout<<a<<&quo