#include<bits/stdc++.h> // 包含常用的库
using namespace std;
long long dc(long long n) // 定义一个函数dc,用于确定给定序号n在Cantor表中的对角线
{
long long i = 1;
while (1)
{
if (((1 + i) * i) / 2 >= n) // 检查当前对角线的最大序号是否大于或等于n
break;
i++;
}
return i; // 返回对角线的序号
}
int main()
{
long long n, a, b, i, j;
cin >> n; // 读入整数n
i = dc(n); // 计算n所在的对角线
j = i * (i - 1) / 2; // 计算这条对角线前面所有元素的总数
a = n - j; // 确定在当前对角线的纵坐标
b = i - a + 1; // 确定在当前对角线的横坐标
if (i % 2 != 0) // 根据对角线的奇偶性来决定输出的分数格式
cout << b << '/' << a;
else
cout << a << '/' << b;
return 0;
}
代码思路总结:
- 首先定义一个函数
dc
,用于根据输入的序号n
确定它在Cantor表中位于哪个对角线上。 - 在
main
函数中,读入需要找到的序号n
。 - 使用
dc
函数计算出n
所在的对角线序号。 - 计算出对角线之前的所有元素总数,以及在当前对角线上的具体位置。
- 根据对角线的奇偶性,输出相应格式的分数。对于奇数对角线,分子是横坐标,分母是纵坐标;对于偶数对角线,分子是纵坐标,分母是横坐标。
- 这样,就可以得到Cantor表中第
n
项的值。