【C#】配列内の2つの整数の合計が指定した整数と一致するか判定するプログラム
はじめに
この記事では、C#を使用して「配列内の任意の2つの整数を足し合わせた結果が、指定された整数と一致するかどうか」を判定するプログラムを紹介します。初心者にもわかりやすいよう、基本的な二重ループによる実装方法から、パフォーマンスを改善した手法まで順番に解説していきます。
対象となる配列の準備
まず、判定に使用する整数型の配列を定義します。
int[] arr = new int[] {
7,
4,
6,
2
};次に、2つの整数の合計と比較する対象となる整数を設定します。
int res = 8;
判定ロジックの実装
配列内のすべての要素の組み合わせを調べるために、二重ループを使用します。外側のループで1つ目の要素を、内側のループで2つ目の要素を選択し、それぞれの合計が指定した整数と一致するかどうかを確認します。
なお、同じ要素同士(i == j)の組み合わせは除外したいので、if文でインデックスが異なる場合のみ計算を行うようにしています。
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < arr.Length; j++) {
if (i != j) {
int sum = arr[i] + arr[j];
if (sum == res) {
Console.WriteLine(arr[i]);
}
}
}
}完全なサンプルコード
ここまでの内容をまとめた、実行可能な完全なサンプルコードは以下の通りです。
using System;
using System.Collections.Generic;
namespace Demo {
public class Program {
public static void Main(string[] args) {
int[] arr = new int[] {
7,
4,
6,
2
};
// 指定された整数
int res = 8;
Console.WriteLine("指定された整数 {0}:", res);
Console.WriteLine("合計が一致する要素:");
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < arr.Length; j++) {
if (i != j) {
int sum = arr[i] + arr[j];
if (sum == res) {
Console.WriteLine(arr[i]);
}
}
}
}
}
}
}実行結果
指定された整数 8: 合計が一致する要素: 6 2
この例では「6 + 2 = 8」という組み合わせが見つかり、条件を満たす要素である「6」と「2」が出力されます。
計算量の課題と改善案
上記の二重ループによる手法はシンプルで理解しやすい反面、時間計算量がO(n²)になるという課題があります。配列の要素数が大きくなると処理時間が急激に増加します。
そこで、HashSetを活用することで、時間計算量をO(n)まで改善できます。「合計がresになるためには、もう片方の値は res - 現在の値 でなければならない」という考え方を利用した実装例が以下です。
HashSetを使った効率的な実装例
using System;
using System.Collections.Generic;
namespace Demo {
public class Program {
public static void Main(string[] args) {
int[] arr = new int[] { 7, 4, 6, 2 };
int res = 8;
HashSet<int> seen = new HashSet<int>();
foreach (int num in arr) {
int complement = res - num;
if (seen.Contains(complement)) {
Console.WriteLine($"{complement} + {num} = {res}");
}
seen.Add(num);
}
}
}
}この方法では各要素を一度だけ走査すればよいため、大規模なデータセットでも高速に動作します。用途やデータサイズに応じて、適切な手法を選択するとよいでしょう。
-
Pythonで2つの整数の合計を求める方法|+と-を使わないビット演算テクニック
問題概要 2つの整数 a と b が与えられたとき、その合計を求めることを考えます。ただし、+ や - のような算術演算子は使用できません。例えば、a = 5、b = 7 の場合、答えは 12 になります。 解決のアプローチ:ビット演算を活用する この問題は、ビット単位の論理演算子を組み合わせることで解決できます。ポイントは次の3つです。 XOR(^:排他的論理和) … 桁上がりを考慮しない「部分和」を計算します。 AND(&:論理積) … 桁上がりが発生する位置を検出します。 左シフト(<< 1) … 検出した桁上がりを1つ上の位へ移動させます。 アルゴリズムの手
-
Pythonで整数配列の重複を除去し、個別の要素だけを出力する方法
整数型の配列が与えられ、その中には重複した要素が含まれている場合があります。この記事では、重複を取り除いて個別(ユニーク)な値だけを出力するPythonプログラムを解説します。 実行例 入力:A = [1, 2, 3, 4, 2, 3, 5, 6] 出力:[1, 2, 3, 4, 5, 6] アルゴリズム このプログラムは次の手順で動作します。 配列の要素を入力として受け取ります。 各要素を先頭から順番に1つずつ取り出します。 取り出した要素が、それ以前にすでに出力されたものかどうかを確認します。 初期値0のフラグ変数を用意し、すでに表示済みなら1、未表示なら0のままにします。 フラ