ytu问题 B: C# 递归求第 n 位数
时间: 2024-12-16 11:16:47 浏览: 9
在C#中,递归是一种函数或方法直接或间接地调用自身的技巧,用于解决可以分解为相似子问题的问题。对于计算数字的第n位,你可以通过递归来实现。下面是一个简单的示例,它会返回整数字符串的指定位置字符:
```csharp
public static char GetNthDigit(int number, int position)
{
if (position == 0) // 如果是第一位(索引从0开始)
return Convert.ToString(number)[0]; // 直接返回数字的第一个字符
else // 否则,递归获取前一位的数字并取出剩下的部分
{
int remaining = number / 10; // 取出除以10后的余数,就是第n位之前的各位组成的数字
return GetNthDigit(remaining, position - 1); // 递归调用自身,继续处理剩余部分
}
}
```
例如,如果你想要得到数字12345的第四位数字(从右向左计),`GetNthDigit(12345, 4)` 将返回 `4`。
相关问题
YTU 问题 J: C语言习题 计算该日在本年中是第几天
ChitGPT: 这个问题可以用 C 语言编写程序来解决。我们需要先输入该年份和月份,再输入在该月份中的第几天,然后按照以下公式计算即可:
int days[] = {0,31,59,90,120,151,181,212,243,273,304,334}; //该数组记录每个月份的天数之和,例如 days[2] 表示前两个月份的总天数
int year, month, day, sum;
scanf("%d%d%d", &year, &month, &day); //输入年份、月份、天数
sum = days[month - 1] + day; //计算月份前的天数之和加上当前天数
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { //判断是否为闰年
if (month > 2) sum += 1; //闰年 2 月份加一天
}
printf("该日在本年中是第 %d 天\n", sum); //输出结果
注意:以上程序是简单实现版本,并未考虑输入数据合法性和错误处理。
YTU 2335: 0-1背包问题
0-1背包问题是一个经典的动态规划问题,它的描述如下:给定一组物品,每种物品都有自己的重量和价值,在限定的总重量内,选择其中若干个物品装入背包,使得背包中物品的总价值最大。其中每种物品最多只能选择一次。
解决0-1背包问题的一种常见算法是动态规划。具体来说,可以使用一个二维数组dp[i][j],其中dp[i][j]表示在前i个物品中选择一些物品放入容量为j的背包中所能获得的最大价值。对于每个物品i,可以选择放入或不放入背包中,因此状态转移方程为:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i])
其中w[i]和v[i]分别表示第i个物品的重量和价值。最终的答案即为dp[n][W],其中n为物品总数,W为背包容量。
需要注意的是,动态规划算法的时间复杂度为O(nW),其中n为物品总数,W为背包容量。因此,在W较大的情况下,需要使用其他算法来解决0-1背包问题,例如贪心算法或者分支定界算法。
阅读全文