タイトル説明
現代数学の有名な証明の1つは、有理数が列挙可能であるというゲオルクカントールの証明です。彼はこの命題を証明するために次の表を使用しました。
上記の表の各項目には、ジグザグの番号が付けられています。最初の項目は1/11/1、次に1 / 2、2 / 1、3 / 1、2 / 2、...です。
入力形式
整数N(1 <= N <= 10 ^ 7)。
出力形式
テーブルのN番目の項目。
入力サンプル
7
サンプル出力
4/1
シミュレーション+法則を見つけ、ラベル付けの順序で対角線部分を描くだけです。1/ 1自体が最初の対角線で、合計1つの数字です。2つの数字1/2と2/1は2番目の対角線で、合計2つの数字があります。3 / 1,2 / 2,1 / 3は3番目の対角線で、合計3つの数字があります...最初の対角線にはいくつかの数字があります。奇数のバーは右上から左下にあり、偶数のバーは左下から右上にあります。どの対角線が数であるかを決定した後、この数(1からラベル付けされた)の数を探し始め、分子と分母が定期的に追加され、分子が1増加し、分母がそれに応じて1減算され、合計が対角数(対角線の桁数)+1
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long sum = 0;
for (int i = 1;; i++) {
sum += i;
if (sum == n) {
if (i % 2 == 0)
cout << i << "/1";
else
cout << "1/" << i;
break;
} else if (sum > n) {
int j = i - 1;
sum -= i;
int diff = n - sum;
if (j % 2 == 1) {
cout << diff << "/" << i + 1 - diff;
} else {
cout << i + 1 - diff << "/" << diff;
}
break;
}
}
return 0;
}