您的位置:首页 > 其它

蓝桥杯算法提高 拿糖果

2017-01-24 10:04 323 查看
原题:

  算法提高 拿糖果  

时间限制:1.0s   内存限制:256.0MB
    

问题描述

  妈妈给小B买了N块糖!但是她不允许小B直接吃掉。

  假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。

  现在小B希望知道最多可以拿多少糖。

输入格式

  一个整数N

输出格式

  最多可以拿多少糖

样例输入

15

样例输出

6

数据规模和约定

  N <= 100000

思路:

一开始看到这个题,我就想到先求素数表,但是后来仔细一想,每次都取质因数,到后来还不是相当于取得合数,我就直接用的sqrt(M),结果对了,代码如下:

#include <math.h>
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int sum = 0,M = N;
while(1)
{
int m = (int)sqrt(M);
sum += m;
M -= 2 * m;
if(M <= 3)
break;
}
cout<<sum;
return 0;
}


后来我又仔细一想,这个不论初始的N有多大,到最后结果只有一个:M<=3,因为当M=3的时候,就不能再取了,比根3小的只有1,而1不是质数;而当M为偶数的时候,最后M肯定是0,所以直接判断输入的是不是偶数就可以了:

#include <math.h>
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
if(N <= 3)
;
else if(N % 2 == 0)
cout<< N / 2;
else
cout<<(N - 3) / 2;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯