斐波那契数列的第n个数
1 1 2 3 5 8 13 求第n个数?
最简单的递归,前两个数直接返回 1 ,之后的数值返回为前两个数之和
// 递归 1 1 2 3 5 8 13
static int GetNumber(int n)
{
int ret = 1;
if (n > 2)
{
return GetNumber(n - 1) + GetNumber(n - 2);
}
else
{
return ret;
}
}
瓶盖换汽水
一共 A 元钱 购买单价 B 的汽水 每 C 瓶汽水的盖子又可以兑换一瓶汽水 一共可以买多少瓶?
第一次购买汽水得到 A/B 瓶,剩余瓶盖 A/B 个
第二次瓶盖兑换汽水瓶盖不足 C 个,不能兑换;瓶盖足够,得到 A/B/C 瓶,剩余瓶盖 A/B/C 个加上不足 C 的部分 A/B%C
static int Buy(int a, int b, int c)
{
return a / b + Cap(c, a / b);
}
// 递归 每 c 个盖子兑换一瓶汽水 一共 d 个盖子 一共可以换多少汽水?
static int Cap(int c, int d)
{
// 不足以兑换一瓶汽水
if (d < c)
{
return 0;
}
else
{
// 判断后续的盖子能否继续兑换 d / c 是这次得到的瓶子 + d % c 这次兑换剩余的瓶盖
return d / c + Cap(c, d / c + d % c);
}
}
开灯问题
一排灯共 n 个,第一个人将灯全部打开,第 2 个人关闭所有的第 2的倍数 个灯,第 3 个人打开所有的第 3的倍数 个灯,第 k 个人打开/关闭所有的第 k 的倍数,最终哪些灯被打开?
static void Main()
{
GetLight(100, 100);
}
static void GetLight(int n, int k)
{
// 默认为 false
bool[] light = new bool[n];
// 第一个人开始遍历
for (int i = 1; i <= k; i++)
{
// 第一个灯开始操作
for (int j = 0; j < n; j++)
{
// 操作第 j 个灯 j 恰好是 i 的倍数
if ((j+1) % i == 0)
{
light[j] = !light[j];
}
}
}
// 打印结果
for (int i = 0; i < n; i++)
{
if (light[i])
Console.WriteLine(i+1);
}
}
整数输出为八进制数输出
static void Main()
{
d2(10);
}
static void d2(int i)
{
if (i > 7)
{
d2(i / 8);
}
Console.Write(i % 8);
}
打印200以内的质数
质数:只能被 1 和自身整除
static void Main()
{
GetNumber(200);
}
static void GetNumber(int num)
{
int count = 0;
for (int i = 1; i <= num; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0 && i != j)
{
break;
}
if (j == i - 1)
{
count++;
Console.WriteLine(i);
}
}
}
Console.WriteLine("count:" + count);
}
杨辉三角
打印 7 行杨辉三角数 使用二维数组
int[][] a = new int[7][];
for (int i = 0; i < 7; i++)
{
a[i] = new int[i + 1];
a[i][0] = 1;
a[i][i] = 1;
if (i > 1)//求出中间的数据
{
for (int j = 1; j < i; j++)
{
// 当前中间索引位置的数 等于 上一行的同索引位置的数与前一个数之和
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
}
// 打印
for (int i = 0; i < a.Length; i++)
{
for (int k = 0; k < a.Length - 1 - i; k++)
{
Console.Write(" ");
}
for (int j = 0; j < a[i].Length; j++)
{
Console.Write(string.Format("{0:00}", a[i][j]));
if (j != a[i].Length - 1)
{
Console.Write(" ");
}
}
Console.WriteLine();
}
三天打渔两天晒网的时间问题
假设渔夫从 2022 年 6 月 1 日起,三天打渔两天晒网,今天是打渔还是晒网?
Console.WriteLine(DateTime.Now.Day - DateTime.Parse("2022-06-01").Day % 5 < 3 ? "打渔" : "晒网");