UVA846- Steps

来源:互联网 发布:mac osx应用程序开发 编辑:程序博客网 时间:2024/05/22 05:00

题意:上n个台阶,每走一次,所走的台阶只能比少一次所走的多一个,或少一个,或者相等,而且,第一次和最后一次必须为1,求所走次数最少

思路:根据题目要求,每次所走的台阶数,一定要对称,我们可以假设有n阶台阶,那么我们从第一个和最后一个一直向中间靠拢,及第一次为n - 2 * 1,

             第二次为n - 2 * 2,第i次为n - 2 * i,一直到n < i,无论最后只剩下多少个台阶,不外乎只是前面中的某个i多走一次。

#include<stdio.h> int main() {int t, x, y;scanf("%d",&t);while(t--) {int step, cnt, p, sum;scanf("%d %d", &x, &y);step = y - x;if(step == 0)printf("0\n");else {sum = 0, cnt = 0, p = 1;while (sum < step) {sum += p; cnt++;if(cnt % 2 == 0)p++;}printf("%d\n", cnt);}}return 0;}



原创粉丝点击