p1014Cantor表,找规律/暴力
找规律,先打表
我们可以发现这个就是一行一行的排列,
第一行一个,第二行两个。。。。
所以我们可以求出n所在行最后一个是第几个,
然后求出n的所在位置,(x,y)x+y==每行个数num-1
当然所在位置单行是顺着排,双行是逆着排
试几个数求出就可以了
#include <bits/stdc++.h>
using namespace std;
int n,sum,num;
int main(int argc, char** argv) {
cin>>n;
while(sum<n){//找到n所在行的最后一个数的顺序
num++;
sum+=num;
}
if(num%2){
cout<<sum-n+1<<"/"<<num-sum+n<<endl;//试着求出
}else{
cout<<num-sum+n<<"/"<<sum-n+1<<endl;
}
return 0;
} 这个直接暴力可以a掉
#include <bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1,j=1,cnt=1;cnt<n;){
while(i-1>0&&cnt<n) --i, ++j, cnt++;//走到上界转弯
if(cnt<n) ++j, cnt++;
while(j-1>0&&cnt<n) ++i, --j, cnt++;//走到下界转弯
if(cnt<n) ++i, cnt++;
if(cnt==n) printf("%d/%d\n",i,j);
}
return 0;
}