Когда новый язык в состоянии быть столь выразительным, как C++. Из-за конфликта интересов между возможностями и низкого уровня высокого уровня это жестко для достижения. Который является, почему мы имеем язык и обрабатываем совместимость во-первых.
, Кроме того, C это, вероятно, более жестко, чтобы сделать с C, потому что так минимизировано и мощен. C побеждает на низкоуровневой арене из-за этого. И C создает хорошую поддержку для C++ и цели C.
Короче говоря Вы будете все еще видеть C и C++ в течение долгого времени.
Непроверено, но:
int minQuarters = 1, minDimes = 1,
minNickels = 1, minPennies = 1,
maxQuarters = 19, maxDimes = 19,
maxNickels = 19, maxPennies = 19,
coinCount = 19, total = 156;
var qry = from q in Enumerable.Range(minQuarters, maxQuarters)
from d in Enumerable.Range(minDimes, maxDimes)
from n in Enumerable.Range(minNickels, maxNickels)
from p in Enumerable.Range(minPennies, maxPennies)
where q + d + n + p == coinCount
where q * 25 + d * 10 + n * 5 + p == total
select new {q,d,n,p};
foreach (var row in qry)
{
Console.WriteLine("{0} quarter(s), {1} dime(s), {2} nickel(s) and {3} pennies",
row.q, row.d, row.n, row.p);
}
На самом деле, для розничных целей - возможно, лучше спросить «Какое наименьшее количество монет я могу выдать»? Замените на:
...
from p in Enumerable.Range(minPennies, maxPennies)
where q + d + n + p <= coinCount
where q * 25 + d * 10 + n * 5 + p == total
orderby q + d + n + p
...
и используйте либо First ()
, либо Take (...)
;-p
Вероятно, вы также можете уменьшить количество проверенных наблюдений, вычитая ( например) q
в тесте maxDimes
(и так далее ...) - что-то вроде (упрощенно):
int minCount = 1,
coinCount = 19, total = 156;
var qry = from q in Enumerable.Range(minCount, coinCount - (3 * minCount))
where q * 25 <= total
from d in Enumerable.Range(minCount, coinCount - (q + (2 * minCount)))
where q * 25 + d * 10 <= total
from n in Enumerable.Range(minCount, coinCount - (q + d + minCount))
where q * 25 + d * 10 + n * 5 <= total
from p in Enumerable.Range(minCount, coinCount - (q + d + n))
where q + d + n + p == coinCount
where q * 25 + d * 10 + n * 5 + p == total
select new { q, d, n, p };