English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
如果在包含数字值序列的整数数组中缺少单个数字,则可以基于数字总和或基于数字的异或找到它。
基于数字的总和 -
n个序号的总和为[n * (n + 1)] / 2。使用此方法获得n个数字的和。
添加数组中的所有元素。
从n个数字的总和中减去数组中数字的总和。
import java.util.Scanner; public class MissingNumber { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入n值: "); int n = sc.nextInt(); int inpuArray[] = new int[n]; System.out.println("输入(n-1)个数字: "); for(int i=0; i<=n-2; i++) { inpuArray[i] = sc.nextInt(); } //寻找缺失的数字 int sumOfAll = (n * (n + 1)) / 2; int sumOfArray = 0; for(int i=0; i<=n-2; i++) { sumOfArray = sumOfArray + inpuArray[i]; } int missingNumber = sumOfAll - sumOfArray; System.out.println("عدم وجود عدد: "+missingNumber); } }
نتيجة الخروج
ادخل قيمة n: 5 ادخل (n-1) أرقام: 1 2 4 5 الرقم المفقود هو: 3
استخدم عملية XOR لبحث عن الرقم المفقود - طريقة أخرى باستخدام XOR.
ابحث عن XOR لكل الأرقام.
ابحث عن XOR لكل الأرقام في الصف.
ثم ابحث عن XOR لنتائجين.
import java.util.Scanner; public class MissingNumber { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("ادخل قيمة n:"); int n = sc.nextInt(); int inpuArray[] = new int[n]; System.out.println("ادخل (n-1) أرقام:"); for(int i=0; i<=n-2; i++) { inpuArray[i] = sc.nextInt(); } // البحث عن الرقم المفقود int xorArray = inpuArray[0]; // XOR لعدد عناصر الصف for(int i=1; i<=n-1; i++) { xorArray = xorArray ^ i; } int xorAll = inpuArray[0]; // حساب XOR لعدد عناصر الصف for(int i=1; i<=n+1; i++) { xorAll = xorAll ^ i; } int missingNumber = xorArray ^ xorAll; System.out.println("عدم وجود عدد: "+missingNumber); } }
نتيجة الخروج
ادخل قيمة n: 5 ادخل (n-1) أرقام: 1 2 4 5 عدم وجود عدد: 3