#include<queue>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<algorithm>#define INF 0x3f3f3f3f#define MAX 5010usingnamespace std;int N, t, a, c, d;intmain(){
cin >> N;while(t < N){
a++;
t += a;}
t -= a; t +=1;if(a %2==0){c =1, d = a;for(int i = t; i < N; i++) c++, d--;}else{c = a; d =1;for(int i = t; i < N; i++) c--, d++;}
cout << c <<"/"<< d << endl;return0;}
参考代码2.0: for循环可以直接写成关于n的式子,少去了一步步循环的步骤;
#include<queue>#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<algorithm>#define INF 0x3f3f3f3f#define MAX 5010usingnamespace std;int N, t, a, c, d;intmain(){
cin >> N;while(t < N){
a++;
t += a;}
t -= a; t +=1;if(a %2==0){c =1; d = a; c +=(N - t); d -=(N - t);}else{c = a; d =1; c -=(N - t); d +=(N - t);}
cout << c <<"/"<< d << endl;return0;}
题的链接:P1014 Cantor表题解: 先找到那条斜线,右上到左下,让 t -= a, 再加 1 即可到达该斜线的第一个部位,再判断当前斜线编号的奇偶性,分情况令 c, d 分别取值,然后一个加一个减即可;注意: 一个小坑点,不是每次都是从右上到左下,还有左下到右上,分为奇偶的情况,细节注意;第一次没看见已提交WA了,改了后就AC了。参考代码1.0:#include <queu...