(每日水题005-1)(细节处理)洛谷P1014 Cantor表
作者:互联网
一、算法分析
可以把cantor表按照从左上到右下进行分层,然后分析出本题的答案与“层数”有关,只要求得层数和该数位于该层的第几个即可。层数的计算可以根据1~n累加等于(1+n)*n/2,然后列一元二次方程计算。
二、代码及注释
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int n;
int k;
int main(){
scanf("%d",&n);
k=((sqrt(1+8.0*n)-1)/2); //这种涉及分层的,一定要先求层数
if(((2*k+1)*(2*k+1)-1)/8!=n) k++; //这种涉及整除和不整除不一样的情况下,对边界特判就行
int cnt=n-(k-1)*k/2; //分母是该层从下往上数第几个,分子是从上往下数第几个
printf("%d/%d",k-cnt+1,cnt);
return 0;
}
_rhinoceros
发布了75 篇原创文章 · 获赞 8 · 访问量 2459
私信
关注
标签:cnt,洛谷,第几个,水题,int,P1014,层数,整除,include 来源: https://blog.csdn.net/numb_ac/article/details/104617874