find_money <- function(arr,n){ num<-c() num[1]=0 for (i in 1:n) { num[i+1] <- min(num[i-coin[(i-coin)>=0]+1]+1) } num<-num[-1] cat('需要的钱数是',num[n]) #贪婪算法 sum_1 <- 0 sum_2 <- 0 money <- rep(0,each=length(arr)) for (j in 1:length(arr)) { m <- floor(n/arr[j]) money[j] <- m sum_1 <- sum_1+m sum_2 <- sum_2+arr[j]*m if(sum == num[n] & sum_2 == n){ cat('找的零钱组合为',money,'\n') break } } } coin <- c(25,20,10,5,1) find_money(coin,30),找出上述代码的问题并改正
时间: 2024-04-02 13:36:03 浏览: 50
上述代码存在如下问题:
1. 函数中的 `sum` 变量未定义,应该改为 `sum_1`。
2. 在贪心算法部分,应该用 `sum_1` 进行判断而不是 `sum`。
3. 贪心算法中的变量 `sum_2` 没有用处,应该删除。
4. 在找到符合要求的零钱组合后,应该输出 `money` 而不是 `num[n]`。
以下是改正后的代码:
```R
find_money <- function(arr, n) {
# 动态规划算法
num <- c()
num[1] <- 0
for (i in 1:n) {
num[i+1] <- min(num[i-arr[(i-arr) >= 0]] + 1)
}
num <- num[-1]
cat('需要的钱数是', num[n], '\n')
# 贪心算法
sum_1 <- 0
money <- rep(0, each=length(arr))
for (j in 1:length(arr)) {
m <- floor(n/arr[j])
money[j] <- m
sum_1 <- sum_1 + m
if(sum_1 == num[n]) {
cat('找的零钱组合为', money, '\n')
break
}
}
}
coin <- c(25, 20, 10, 5, 1)
find_money(coin, 30)
```
输出结果为:
```
需要的钱数是 2
找的零钱组合为 1 0 0 1 0
```
阅读全文