[b][color=red]问题[/color]:[/b]阳仔作为OJ的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样的序列:
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 ……
即大小为k的数字,正好会在序列中连续重复k次。写到这里,阳仔兴奋了,但是他不知道这种序列叫什么名字,那就暂时叫它jobdu疯狂序列好了。现在阳仔想让你解决一个问题是,假如给你一个整数n,你能说出这个序列中,第n个元素的大小是多少么?
输入:每个测试文件包含多个测试案例,每个测试案例只有一行,即整数n,1 <= n <= 10^18,代表要查找的第n个元素。
输出:对于每个测试案例,输出疯狂的jobdu序列中的第n个元素。
实现代码:
运行结果:
[img]http://dl.iteye.com/upload/attachment/0064/3972/6f6b0490-c193-3909-b06b-d8564a6d2296.jpg[/img]
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 ……
即大小为k的数字,正好会在序列中连续重复k次。写到这里,阳仔兴奋了,但是他不知道这种序列叫什么名字,那就暂时叫它jobdu疯狂序列好了。现在阳仔想让你解决一个问题是,假如给你一个整数n,你能说出这个序列中,第n个元素的大小是多少么?
输入:每个测试文件包含多个测试案例,每个测试案例只有一行,即整数n,1 <= n <= 10^18,代表要查找的第n个元素。
输出:对于每个测试案例,输出疯狂的jobdu序列中的第n个元素。
实现代码:
#include <stdio.h>
#include <math.h>
int main(int argc,char* argv[]){
unsigned long long n;
unsigned long long i;
for(;~scanf("%llu",&n);){
for(i=(unsigned long long)(.5*(sqrt(8*n)+1));i*(i-1)<2*n;++i);
printf("%lu\n",i-1);
}
return 0;
}
运行结果:
[img]http://dl.iteye.com/upload/attachment/0064/3972/6f6b0490-c193-3909-b06b-d8564a6d2296.jpg[/img]