[题目解析]糖果归谁

糖果归谁

【问题描述】

Alice和Beesy两兄妹(以下简称A和B)正在看“2011中山教育年度人物活动”颁奖晚会的直播。
突然一包糖果从烟囱掉到了房子里,然后窗外一辆鹿车一闪而过。两兄妹很是诧异,今天不是圣诞节啊,怎么圣诞老人也上班?B说可能圣诞老人觉得每年只上一天班太无聊了,A也同意。接下来两兄妹的注意力同时集中到了这包糖果上。他们都不同意平分糖果,都想自己独自占有。所以两人决定通过游戏来决定谁能独享这包糖。
这包糖果里面总共K个(3< = K < 2^31 ),B给出一个整数L(1 < L < K),2人轮流取走糖果,同一时间,某人能取走1至L个糖果。取走最后一个糖果的 为胜者。A先拿,B为了确保能赢她必须思考一下,慎重给出L。同学们帮一下B,想一个最小的L 能让B赢。

【输入】

输入一行只包含一个整数K。

【输出】

输出一行,即对应的答案L。要求保证B必胜。假如有多个答案,输出最小的L。如果不存在保证能必胜的L,则输出0。

【输入样例】

3

【输出样例】

2

【数据样例解释】

例如,如果只有3个糖果,B把L定为2,有必胜把握。事实上,如果A取了1个糖果,那么B可以取剩下的2个糖果,B胜。如果A取了2个糖果,那么B取1个,也是B胜。

【限制】

%60的数据:K<=50 %100的数据:K< 2^31

【自己思路+代码】

经过研究数据发现,这道题我们需要保证到最后一次取糖果时,所剩的糖果数一定要大于等于L+1,如果小了,就不能够保证B会获胜。再仔细研究,我们发现不管如何L+1始终是K的因数,再结合这道题的要求看,我们需要找出K的最小因数,注意,这里的最小因数不能是2,因为如果是二,那L将会变成1,就不符合题意了。找出K的最小因数后,我们需要将该数减一,求出L,然后输出。

#include<iostream>
using namespace std;
long long k;
int main()
{
 cin>>k;
 for(int i=3;i<=k;i++){
  if(k%i==0){
   cout<<(i-1);
   return 0;
  }
 }
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值