我有一个数字列表var coins = [16, 8, 4, 2, 1];
,我应该要求用户输入一个数字然后找出需要哪些数字组合来等于用户输入的数字,然后将该信息显示给用户(例如,您使用任何给定数字的次数。)
这里是代码。
//list of numbers, and the variable that will hold the math for the program
var coins = [16, 8, 4, 2, 1];
var value = 0;
//ask the user for a number
var number = Number(prompt('please enter a number between 20 and 100.'));
//counting loops and list locations
var i = 0;
var count = 0;
//filter out numbers under 20 and over 100
if (number < 20 || number > 100){
alert("Invalid number");
}
while (value != number ) {
//run the loop while a number from the list + the value is less than or equal to the number the user entered
while(coins[i] + value <= number){
value += coins[i];
console.log(coins[i]);
//count how many times the loop runs. currently its only doing the first position of the list which seems wrong.
if (coins[i] == coins[0]){
count++;
}
}
i++;
}
console.log(value);
console.log(number);
console.log(i);
console.log(count);
我想计算每个数字的使用次数,但我不能真正计算循环运行的次数,因为它们有时会在循环中使用不同的数字,从而使计数错误。在Chrome控制台日志中console.log(coins[i]);
显示了一个硬币[i]号码旁边的一个小数字,这个数字究竟是什么,我将如何获得它,因为它似乎正是我需要的。
对,不是我只是使用
if (coins[i] == coins[0]){
count++;
}
因为我不认为除了第一个数字16之外还有一个数字会导致任何重复,但这感觉就像是一个廉价的工作。
答案 0 :(得分:0)
您可以创建字典计数器并将其初始化为:
var num = {};
coins.forEach(function (coin) {
num[coin] = 0;
});
用法:
while (value != number) {
while(coins[i] + value <= number){
value += coins[i];
num[coins[i]]++;
}
}
console.log(num);
答案 1 :(得分:0)
使用这样的对象:
var counts = {"16":0, "8":0, "4":0, "2":0, "1":0}
而不是单个int count
然后使用as:
counts[i]++;
答案 2 :(得分:0)
我想你问的是如何获得每个号码的使用次数。
如果输入为20,则使用16次,使用4次。
显然,{16,8,4,2,1}中的每个数字需要5个计数器。
您需要声明
var countCoins = [0, 0, 0, 0, 0];
而不是
if (coins[i] == coins[0]){
count++;
}
把
countCoins[i]++;
最后,countCoins [i]将使用硬币[i]的次数
您可以决定将它们全部添加在一起,也可以将它们分开。