第4题: 输入一个人民币的整数值(100以内以元为单位),编程找到用10元、5元、2元、1元表示的总数量的最小组合方式。 第5题: 从键盘输入一个字符,求出它的前驱和后继字符(按照ASCII码值排序),并按照从小到大的顺序输出这三个字符和对应的ASCII值。
时间: 2024-09-29 21:07:47 浏览: 44
java2实用教程课后习题答案(第三版编程题).docx
第4题:这是一个经典的背包问题,可以用动态规划来解决。我们可以创建一个二维数组dp[i][j],其中i表示当前剩余的金额,j表示剩余金额能用的最大10元硬币数。状态转移方程是dp[i][j] = min(dp[i][j], dp[i - 10 * k][k] + 1),其中k是1到j范围内使得10 * k <= i的最大值。初始条件是dp[0][0] = 0。
```cpp
#include <iostream>
int findMinCoins(int amount) {
int coins[] = {10, 5, 2, 1};
int n = sizeof(coins) / sizeof(coins[0]);
std::vector<int> dp(amount + 1, INT_MAX);
dp[0] = 0;
for (int i = 0; i <= amount; ++i) {
for (int j = 0; j < n; ++j) {
if (coins[j] <= i && dp[i - coins[j]] != INT_MAX)
dp[i] = std::min(dp[i], dp[i - coins[j]] + 1);
}
}
return dp[amount];
}
int main() {
int input;
std::cout << "Enter a value in RMB (100以内): ";
std::cin >> input;
int minCoins = findMinCoins(input);
std::cout << "Minimum coin combination: " << minCoins << std::endl;
return 0;
}
```
运行此程序时,请输入一个不超过100元的整数,它将输出使用最少数量的硬币组合。
第5题:要找出给定字符的前驱和后继,我们需要遍历ASCII码表。如果用户输入的是大写字母或小写字母,我们可以分别处理。这里是处理小写字母的例子:
```cpp
#include <iostream>
#include <cctype>
char getPrecedingSuccessor(char ch) {
if (ch >= 'a' && ch <= 'z') {
ch--;
if (ch < 'a')
ch = 'z';
else
ch++;
return ch;
} else if (ch >= 'A' && ch <= 'Z') {
ch--;
if (ch < 'A')
ch = 'Z';
else
ch++;
return ch;
} else {
// For other characters or non-alphabetic inputs, handle accordingly
return ch;
}
}
int main() {
char input;
std::cout << "Enter a character: ";
std::cin >> input;
char preceding = getPrecedingSuccessor(input);
std::cout << "Predecessor: " << static_cast<char>(input - 1) << ", ASCII: " << static_cast<int>(input) - 1 << std::endl;
std::cout << "Character: " << input << ", ASCII: " << static_cast<int>(input) << std::endl;
std::cout << "Successor: " << preceding << ", ASCII: " << static_cast<int>(preceding) << std::endl;
return 0;
}
```
运行这段代码,输入一个字符,它将输出该字符及其前驱和后继,以及它们的ASCII值。如果输入的不是字母,可以根据实际需求进行相应处理。
阅读全文