码迷,mamicode.com
首页 > 其他好文 > 详细

半数集问题-分治

时间:2019-11-27 19:13:42      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:一个   ace   code   color   分治   分治法   gets   题目   name   

题目:

给定一个自然数,可以在其前面增加大小不超过它本身一半的数字,形成的新数字属于半数集,这个数本身也属于半数集

例如set(6)={6,16,26,126,36,136}

求n得半数集的元素个数

 

思路:

getset(n)=getset(1)+getset(2)+...+getset(n/2)+1

将原问题分解成了n/2个小问题,这也是分治法的思想

 

上代码:

 1 #include<iostream>
 2 using namespace std;
 3 int getset(int n) {
 4     int ans = 1;//当n不同时,每一个getset(n)都是不同的函数,局部变量ans互相都不关联
 5     if (n > 1) {
 6         for (int i = 1; i <= n / 2; i++) {
 7             ans += getset(i);//将每一步得到的结果加到getset(6)的ans上去
 8         }
 9     }
10     return ans;
11 }
12 int main() {
13     cout<<getset(6);
14 
15     return 0;
16 }

 

半数集问题-分治

标签:一个   ace   code   color   分治   分治法   gets   题目   name   

原文地址:https://www.cnblogs.com/program-ai-cv-ml-se-fighting/p/11944463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!