您的位置:首页 > 其它

uva 11384 Help is needed for Dexter

2013-03-14 19:19 405 查看
点击打开链接uva 11384

思路:找规律

分析:

1 题目说给定一个小于10^9的数,现在有n个数要求经过最少的步骤使得这个序列的所有数都为0,求这个最少的步骤

2 很明显的找规律题,题目明确说明每一次可以选择任意个的数减去一个正整数,那么我们看以下这个例子

1 2 3 4 5 6 = (1 2 3 (4 5 6)-4) +1 = (1 2 3 0 1 2) +1

那么我们根据题目的意思我们可以知道每一次可以选择多个相同的数进行减去一个数,那么所有相同的数实际上是同时消去的,那么这个序列1 2 3 0 1 2等价于 1 2 3 (0可以不用考虑)

那么我们假设n = 6时候为f(6),那么f(6) = f(3)+1.

3 那么推广所有的n,那么f(n) = f(n/2)+1,n = 1的时候f(1) = 1

代码:


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int getAns(int n){
return n == 1 ? 1 : getAns(n/2)+1;
}

int main(){
int n;
while(scanf("%d" , &n) != EOF)
printf("%d\n" , getAns(n));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: