{"record":{"id":"1aea273de475861b","repo":"TheAlgorithms/C-Sharp","slug":"coins-array-must-contain-coin-1-nameof-coinsasarray","errorCode":null,"errorMessage":"Coins array must contain coin 1 {nameof(coinsAsArray)}.","messagePattern":"Coins array must contain coin 1 (.+?)\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs","lineNumber":151,"sourceCode":"        {\n            throw new InvalidOperationException($\"The coin cannot be lesser or equal to zero {nameof(coin)}.\");\n        }\n    }\n\n    private static void ValidateCoinsArray(int[] coinsArray)\n    {\n        var coinsAsArray = coinsArray.ToArray();\n\n        if (coinsAsArray.Length == 0)\n        {\n            throw new InvalidOperationException($\"Coins array cannot be empty {nameof(coinsAsArray)}.\");\n        }\n\n        var coinsContainOne = coinsAsArray.Any(x => x == 1);\n\n        if (!coinsContainOne)\n        {\n            throw new InvalidOperationException($\"Coins array must contain coin 1 {nameof(coinsAsArray)}.\");\n        }\n\n        var containsNonPositive = coinsAsArray.Any(x => x <= 0);\n\n        if (containsNonPositive)\n        {\n            throw new InvalidOperationException(\n                $\"{nameof(coinsAsArray)} cannot contain numbers less than or equal to zero\");\n        }\n\n        var containsDuplicates = coinsAsArray.GroupBy(x => x).Any(g => g.Count() > 1);\n\n        if (containsDuplicates)\n        {\n            throw new InvalidOperationException($\"Coins array cannot contain duplicates {nameof(coinsAsArray)}.\");\n        }\n    }\n}","sourceCodeStart":133,"sourceCodeEnd":169,"githubUrl":"https://github.com/TheAlgorithms/C-Sharp/blob/96e2905cab7bc6b33ac0a34ee5bb82ddccbcbb6c/Algorithms/Problems/DynamicProgramming/CoinChange/DynamicCoinChangeSolver.cs#L133-L169","documentation":"DynamicCoinChangeSolver.ValidateCoinsArray requires the coin system to include the coin value 1 so every amount can be represented. If coinsAsArray has no element equal to 1, the solver throws InvalidOperationException rather than returning incomplete change. This is an input preconditions check run before dynamic programming begins.","triggerScenarios":"Calling GenerateSingleCoinChanges (which invokes ValidateCoinsArray) with an array such as [2, 5, 10] that omits the value 1.","commonSituations":"Using a currency-like system with only large denominations (e.g. [5, 10, 25]); hand-trimming the coin list and accidentally dropping the 1-coin; loading denominations from config where 1 was filtered as trivial.","solutions":["Add 1 to the coins array before calling the solver.","If 1 is intentionally absent, switch to a solver variant that handles arbitrary coin systems (e.g. greedy/DP without the coin-1 precondition).","Validate the coin list in caller code and produce a clearer domain-specific message."],"exampleFix":"// before\nvar coins = new[] { 2, 5, 10 };\nsolver.GenerateSingleCoinChanges(coins, amount);\n// after\nvar coins = new[] { 1, 2, 5, 10 };\nsolver.GenerateSingleCoinChanges(coins, amount);","handlingStrategy":"validation","validationCode":"if (coins == null || !coins.Contains(1)) throw new ArgumentException(\"Coin system must include coin 1.\", nameof(coins));","typeGuard":null,"tryCatchPattern":"try { solver.GenerateSingleCoinChanges(coins, amount); }\ncatch (InvalidOperationException ex) { Console.Error.WriteLine($\"Invalid coin system: {ex.Message}\"); }","preventionTips":["Always include 1 in denomination sets","Centralize coin-system validation in one helper","Test solvers with [1] as the minimal valid system"],"tags":["invalid-argument-value","coin-change","precondition"],"backgroundTag":"invalid-argument-value","analyzedSha":"96e2905cab7bc6b33ac0a34ee5bb82ddccbcbb6c","analyzedAt":"2026-09-13T17:04:01.438Z","contentChangedAt":"2026-09-13T17:04:01.438Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}