编写C++程序:利用递归算法实现从键盘输入一个任意正数,依次正序输出它的每一位。 例如: 输入:123 输出:1 2 3
时间: 2024-05-01 18:16:28 浏览: 18
```c
#include <stdio.h>
void printDigits(int n) {
if (n < 10) { // 当n只剩一位时,直接输出
printf("%d ", n);
return;
}
printDigits(n / 10); // 递归调用
printf("%d ", n % 10);
}
int main() {
int n;
printf("请输入一个任意正数:");
scanf("%d", &n);
printf("它的每一位依次正序输出为:");
printDigits(n);
return 0;
}
```
相关问题
java编写程序实现:从键盘输入两个整数,计算并输出两个整数的最大公约数
好的,我可以帮你实现这个程序。以下是代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1 = input.nextInt();
System.out.print("请输入第二个整数:");
int num2 = input.nextInt();
int gcd = getGCD(num1, num2);
System.out.println(num1 + "和" + num2 + "的最大公约数是:" + gcd);
}
// 求最大公约数的方法
public static int getGCD(int num1, int num2) {
if (num2 == 0) {
return num1;
} else {
return getGCD(num2, num1 % num2);
}
}
}
```
这个程序会要求用户输入两个整数,然后计算它们的最大公约数,并输出结果。`getGCD` 方法使用递归的方式求最大公约数,直到两个数中有一个为 0 时停止递归。
编写一个C++程序实现:用递归回溯和迭代回溯设计0-1背包问题
下面是一个使用递归回溯和迭代回溯算法来解决0-1背包问题的C++程序示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct Item {
int weight;
int value;
};
int max(int a, int b) {
return (a > b) ? a : b;
}
// 递归回溯算法
int recursiveBacktracking(vector<Item> items, int capacity, int index) {
if (index < 0 || capacity == 0) {
return 0;
}
if (items[index].weight > capacity) {
return recursiveBacktracking(items, capacity, index - 1);
} else {
return max(recursiveBacktracking(items, capacity, index - 1),
items[index].value + recursiveBacktracking(items, capacity - items[index].weight, index - 1));
}
}
// 迭代回溯算法
int iterativeBacktracking(vector<Item> items, int capacity) {
int n = items.size();
vector<vector<int>> dp(n + 1, vector<int>(capacity + 1));
for (int i = 0; i <= n; i++) {
for (int w = 0; w <= capacity; w++) {
if (i == 0 || w == 0) {
dp[i][w] = 0;
} else if (items[i - 1].weight <= w) {
dp[i][w] = max(items[i - 1].value + dp[i - 1][w - items[i - 1].weight], dp[i - 1][w]);
} else {
dp[i][w] = dp[i - 1][w];
}
}
}
return dp[n][capacity];
}
int main() {
vector<Item> items = {{10, 60}, {20, 100}, {30, 120}};
int capacity = 50;
// 使用递归回溯算法求解
int max1 = recursiveBacktracking(items, capacity, items.size() - 1);
cout << "递归回溯算法求解结果: " << max1 << endl;
// 使用迭代回溯算法求解
int max2 = iterativeBacktracking(items, capacity);
cout << "迭代回溯算法求解结果: " << max2 << endl;
return 0;
}
```
在这个示例中,我们定义了一个`Item`结构体来表示每个物品的重量和价值。然后,我们实现了`max`函数来返回两个整数中较大的一个。
接下来,我们分别实现了递归回溯算法和迭代回溯算法来解决0-1背包问题。
在`main`函数中,我们创建了一个包含三个物品的向量,并设置背包容量为50。然后,我们分别使用递归回溯算法和迭代回溯算法来求解背包问题,并将结果输出到控制台。
你可以根据自己的需求修改物品向量和背包容量,运行程序以获取不同情况下的结果。