我仍然是初学者,这里的总菜鸟所以请耐心等待,我来到这个练习基本上是将pennys /美分的数量分散到25,10,5,2,1的足够数量的硬币中。
我试图只用if条件来编写,因为我还在学习,所以不熟悉内置函数。
该功能适用于测试的数字65,分别给出25,25,10,5的数组
然而,当我用数字46测试时,它给出了25,25,10,5,55,10,10,1的数组,这显然是假的,我的功能显然是错误的。
请你把错误指向我。
这是我的代码并提前致谢。
var co = [];
function coin(n){ //46
// co = [25,]
if (n>=25){
co.push("25");
n = n-25;
coin(n);
}
else if (n>=10){
co.push("10");
n = n-10;
coin(n);
}
else if (n>=5){
co.push("5");
n = n -5;
coin(n);
}
else if (n>=2){
co.push("2");
n = n - 2;
coin(n);
}
else if (n>=1){
co.push("1");
n = n - 1;
coin(n);
}
else if (n == 0){console.log(co);}
}
答案 0 :(得分:3)
问题是,当您第二次调用该函数时,您不会清除该数组。你每次都需要清除它。
你可以创建一个新功能 override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identifier: "NumbersCollectionViewCell">, forIndexPath: NSIndexPath>) as? NumbersCollectionViewCell else {
print("failed to get cell")
return UICollectionViewCell()
}
switch indexPath.section {
case 0: cell.imageView.image = UIImage(named: numberImageFiles[indexPath.row])
case 1: cell.imageView.image = UIImage(named: specialNumberImageFiles[indexPath.row])
default: break
}
return cell
}
Countcoin(n)
现在调用此函数而不是function Countcoin(n){
co = [];
coin(n)
}
或者你只能构建一个函数但是使用循环,而不是递归。
coin
答案 1 :(得分:1)
您的代码运行正常。但是你只有全局数组 co </ strong>,它保留了以前的答案。所以我认为你应该初始化函数内部的数组,然后返回它。
答案 2 :(得分:1)
您可以通过以下方式执行每项条件:
简单划分(向下舍入)
将商分配给var或元素(如输出标记)
将模数用于下一个条件
<强>段强>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
fieldset { width: 20ex; font: 400 16px/1.4 'consolas'; color: #00e; }
legend { font:inherit; font-size: 1.25rem; }
input, label, output { padding: 1px 3px; font:inherit;}
input { width: 7ex; }
output { width: 5ex; }
</style>
</head>
<body>
<header></header>
<form id="change" name="change">
<fieldset>
<legend>coinCounter</legend>
<label for="inp1">$</label><input id="inp1" name="inp1" placeholder="0.00"><br/>
<label for="q">Quarters: </label><output id="q" name="q" for="inp1">0</output><br/>
<label for="d">Dimes: </label><output id="d" name="d" for="inp1">0</output><br/>
<label for="n">Nickels: </label><output id="n" name="n" for="inp1">0</output><br/>
<label for="p">Pennies: </label><output id="p" name="p" for="inp1">0</output>
</fieldset>
</form>
<footer>Hit <kbd>⏎ Return</kbd> before typing</footer>
<script>
var inp1 = document.getElementById('inp1');
inp1.addEventListener('input', function(e) {
delay(coinCounter(this.value), 5000 );
}, false);
function coinCounter($) {
var denomination = $.split('.');
var dollars = Number(denomination[0] * 100);
console.log('dollars: '+dollars);
var cents = Number(denomination[1]);
console.log('cents: '+cents);
var total = Number(dollars + cents);
console.log('total: '+total);
var modQ, modD, modN;
if(total >= 25){
var quarter = Math.floor(total / 25);
console.log('quarters: '+quarter);
document.getElementById('q').innerHTML = quarter;
}
modQ = total % 25;
if(modQ >= 10){
var dime = Math.floor(modQ / 10);
console.log('dimes: '+dime);
document.getElementById('d').innerHTML = dime;
}
modD = modQ % 10;
if(modD >= 5){
var nickel = Math.floor(modD / 5);
console.log('nickels: '+nickel);
document.getElementById('n').innerHTML = nickel;
}
modN = modD % 5;
if(modN){
var penny = Math.floor(modN);
console.log('pennies: '+penny);
document.getElementById('p').innerHTML = penny;
}
else {
modN = 0;
}
return false;
}
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
</script>
</body>
</html>
&#13;
答案 3 :(得分:1)
既然你提到你正在学习,我想我会提交另一种方法 - 我提供了一步一步的细分。
内置使用的功能:
Array.prototype.reduce - 对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。
function coins(cents) {
return [25, 10, 5, 1].reduce(function(totalDenoms, denom) {
// if we have any values for this denomination, add it to the final array
for (var i = 0; i < Math.floor(cents/denom); i++) {
totalDenoms.push(denom);
}
// set the remaining amount of cents to process
cents = cents % denom;
// return the accumulated totals
return totalDenoms;
}, []);
}