UVA11384正整数序列(把123..变成0的最小步数)
生活随笔
收集整理的這篇文章主要介紹了
UVA11384正整数序列(把123..变成0的最小步数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ?給定一個正整數n,你的任務是最少的操作次數把序列1 2 3 4 5...n中所有的數字都變成0,每次操作可以從序列中選擇一個活多個整數,同時減去一個相同的正整數,比如
1 2 3可以吧2和3同時減少2,得到1 0 1
思路:
? ? ?我們只考慮操作一次的時候,操作一次是不是最大的效果就是剪掉一半,
比如1 2 3 4 5 6 7 變成1 2 3 0 1 2 3 等價于1 2 3直接減少一半,那么在吧減少后等等價狀態1 2 3在作同樣的操作直到只剩一個的時候就ok了。
#include<stdio.h>
int F(int n)
{
? ? return n == 1 ? 1 : F(n/2) + 1;
}
int main ()
{
? ? int n;
? ? while(~scanf("%d" ,&n))
? ? {
? ? ? ?printf("%d\n" ,F(n));
? ? }
? ? return 0;
}
? ??
? ? ?給定一個正整數n,你的任務是最少的操作次數把序列1 2 3 4 5...n中所有的數字都變成0,每次操作可以從序列中選擇一個活多個整數,同時減去一個相同的正整數,比如
1 2 3可以吧2和3同時減少2,得到1 0 1
思路:
? ? ?我們只考慮操作一次的時候,操作一次是不是最大的效果就是剪掉一半,
比如1 2 3 4 5 6 7 變成1 2 3 0 1 2 3 等價于1 2 3直接減少一半,那么在吧減少后等等價狀態1 2 3在作同樣的操作直到只剩一個的時候就ok了。
#include<stdio.h>
int F(int n)
{
? ? return n == 1 ? 1 : F(n/2) + 1;
}
int main ()
{
? ? int n;
? ? while(~scanf("%d" ,&n))
? ? {
? ? ? ?printf("%d\n" ,F(n));
? ? }
? ? return 0;
}
? ??
總結
以上是生活随笔為你收集整理的UVA11384正整数序列(把123..变成0的最小步数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA11992不错的线段树段更新
- 下一篇: UVA11389巴士司机问题