【UVA11384】Help is needed for Dexter(数学题。。。)

Problem H

Help is needed for Dexter

Time Limit: 3 Second

Dexter is tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game he planned for her is quite easy to play but not easy to win at least not for Dee Dee. But Dexter does not have time to spend on this silly task, so he wants your help.

There will be a button, when it will be pushed a random number N will be chosen by computer. Then on screen there will be numbers from 1 to N. Dee Dee can choose any number of numbers from the numbers on the screen, and then she will command computer to
subtract a positive number chosen by her (not necessarily on screen) from the selected numbers. Her objective will be to make all the numbers 0.

For example if N = 3, then on screen there will be 3 numbers on screen: 1, 2, 3. Say she now selects 1 and 2. Commands to subtract 1, then the numbers on the screen will be: 0, 1, 3. Then she selects 1 and 3 and commands to subtract 1. Now the numbers are
0, 0, 2. Now she subtracts 2 from 2 and all the numbers become 0.

Dexter is not so dumb to understand that this can be done very easily, so to make a twist he will give a limit L for each N and surely L will be as minimum as possible so that it is still possible to win within L moves. But Dexter does not have time to think
how to determine L for each N, so he asks you to write a code which will take N as input and give L as output.

Input and Output:

Input consists of several lines each with N such that 1 ≤ N ≤ 1,000,000,000. Input will be terminated by end of file. For each N output L in separate lines.


SAMPLE INPUT


OUTPUT FOR SAMPLE INPUT


1

2

3


1

2

2

Problemsetter: Md. Mahbubul Hasan

给出数字n 用最少的操作次数把序列1-n中的所有数字都编程0 每次操作可以从序列中选择一个或者多个数 同时减去一个相同的正整数

通过对题目的分析我们可以考虑下一个问题 如果有n个数字 但是这些数字只是1、2、3的情况 根据游戏的规则 他们和问题中n=3的可以说是等价的 你可以试下 所以说为了是问题简单 一个n的问题必须化解成一个比这个简单的问题 为此我们就要找到这种问题的递推公式。

  思考下 如果每次我们给后面一般的数减去个n/2则问题就化简成了n/2的问题

  例如 n=6时 将4,5,6,同时减去个3 则数据就变成了{1,2,3,1,2,3}此问题等价于n=3时的问题

  所以得到递推公式 f(n)=f(n/2)+1

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

int alpha(int m);

int main(){
    int n;
    while(scanf("%d", &n)!=EOF){
        printf("%d\n", alpha(n));
    }
    return 0;
}

int alpha(int m){
    return m == 1 ? 1 : alpha(m/2) + 1;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-13 12:45:44

【UVA11384】Help is needed for Dexter(数学题。。。)的相关文章

UVa11384 Help is needed for Dexter (思维)

链接:http://acm.hust.edu.cn/vjudge/problem/26096分析:带几个栗子进去发现,序列1,2,...,n,为了平衡将(n/2+1)~n的数同时减去(n/2+1),得到1,2,...n/2,0,1,...(n-1)/2,它等价于1,2,...,n/2,因此f(n)=f(n/2)+1,边界是f(1)=1. 1 #include <cstdio> 2 3 int f(int n) { 4 return n == 1 ? 1 : f(n / 2) + 1; 5 }

uva 11384 Help is needed for Dexter(模拟)

uva 11384 Help is needed for Dexter Dexter is tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game he planned for her is quite easy to play but not easy to win at least not for Dee Dee. But Dexter does not have time to spend on th

uva------Help is needed for Dexter(11384)

Problem H Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game he planned for her is quite easy to play but not easy to win at least not for Dee Dee. But Dexter does not hav

UVA - 11384 - Help is needed for Dexter (找规律!!)

UVA - 11384 Help is needed for Dexter Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem H Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee Dee b

UVA 11384 Help is needed for Dexter

#include<iostream> using namespace std; int n; int dfs(int n){return n == 1 ? 1 : dfs(n / 2) + 1;} int main() { while (cin >> n) cout << dfs(n) << endl; return 0; }

UVa 11384 Help in needed for Dexter 正整数序列

序列太简单了,每次对于后面一半进行操作,使之变成前一半就行了. i个数需要操作的次数 f(i)=f(i/2)+1 代码如下: #include<cstdio> using namespace std; int f(int n){ return n==1?1:f(n/2)+1; } int main(){ int n; while(scanf("%d",&n)==1) printf("%d\n",f(n)); return 0; } 原文地址:ht

贪心思维 专题记录 2017-7-21

A.UVa 10382 - Watering Grass 题目大意: 有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆.求出最少需要的喷水装置个数. 思路 :转化一下 将二维降成一维      d = sqrt(1.0*r*r-w*w/4.0) 接着就是区间覆盖问题了 #include <bits/stdc++.h> using namespace std; const int maxn = 10000+10;

思维专题(不定期更新)

1.UVa 11100 - The Trip, 2007 题意:给出若干大小不同的包裹,小的能够装在大的包裹里面.求最小的大包裹数,并且保证在所有的大包裹中,所含有的小包裹数目最小. 思路:显然,相同大小的包只能放在不同的大包里,那么最小的大包数目就是相同大小的包的最大数目,记为k.之后,根据从小到大排序后,对于每个大包i可选取从i开始,间隔k个包的那些包裹作为该大包从里到外的各个包裹. 1 #include<iostream> 2 #include<algorithm> 3 us

hdu2374 A Game with Marbles(简单数学题)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2374 Problem Description There are n bowls, numbered from 1 to n. Initially, bowl i contains mi marbles. One game step consists of removing one marble from a bowl.