Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
菜鸟贴代码和思路(二分求得层数)#include <stdio.h> int h(int n) { return n+n*(n-1)/2; } int g(int num) { int l = 1, r = 5000, m; while (l <= r) { m = ((l+r)>>1); if (h(m) < num) { l = m + 1; } else if (h(m) > num) { r = m - 1; } else { return m; } } if (h(r) > num) return r; else return r+1; } void f(int num, int &a, int &b) { int t = g(num); int sum = h(t) - h(t-1) + 1;//两个数的和 if (t%2!=0) { a = h(t) - num + 1; b = sum - a; } else { b = h(t) - num + 1; a = sum - b; } } int main() { int num, a, b; while (~scanf("%d", &num)) { f(num,a,b); printf("TERM %d IS %d/%d\n",num,a,b); } return 0; } /*思路就是:一个等差数列,已知An(输入的数),A1=1,D=1,求N,使用二分查找(刚刚看了一下别人的解题报告,好像暴力求N也可以),然后根据层数(N)的奇偶决定两个数谁在前谁在后(就是蛇形排列的解决办法)。说得有点儿语无伦次,太困了。第一次发代码和思路,多指教~~ */ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator