其他分享
首页 > 其他分享> > (每日水题005-1)(细节处理)洛谷P1014 Cantor表

(每日水题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