【题目描述】
已知一个序列中元素的值为 1 ~ 10^7,并将它们分成了若干块。分块的规则是第 x 块有 x 个元素。即,第 1 块有 1 个元素,第 2 块有 2 个元素,……,以此类推。
【输入格式】
一个整数 n。表示序列中的第 n 个元素。
【输出格式】
按格式“Locate at position y, in block x.”,输出块 x 中的第 y 个元素。
【输入样例】
12
【输出样例】
Locate at position 2, in block 5.
【算法分析】
●下图示意了分块规则(即,第 x 块有 x 个元素)。可通过它发现求解规律。
● 此算法思想在 “AcWing:5507. Cantor表” 中有应用。
【算法代码】
#include <bits/stdc++.h>
using namespace std;int main() {int i,n;cin>>n;for(i=1; i<n; i++) n-=i;cout<<"Locate at position "<<n<<", in block "<<i<<".";return 0;
}/*
in:
12out:
Locate at position 2, in block 5.
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/144715536
https://www.acwing.com/solution/content/231311/
https://www.luogu.com.cn/problem/P1014