第五届蓝桥杯软件类决赛真题-C-A-1_海盗分金币

/*【题目】


标题:海盗分金币


    有5个海盗,相约进行一次帆船比赛。


    比赛中天气发生突变,他们被冲散了。


    恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人。


    第一个人在沙滩上发现了一堆金币。他把金币分成5等份。发现刚好少一个金币。他就从自己口袋拿出一个金币补充进去,
然后把属于自己的那份拿走。


    第二个到达的人也看到了金币,他也和第一个人一样,把所有金币5等分,发现刚好缺少一个金币,于是自己补进去一个,
拿走了属于自己的那份。


    第三,第四,第五人的情况一模一样。


    等他们到了目的地,都说自己的情况,才恍然大悟,一起去荒岛找金币,然而再也没有找到荒岛。他们都惋惜地说:
岛上还有一千多枚金币呢!
    
    请你根据这些信息,推算荒岛上最初有多少金币?


【韶关学院蓝桥集训解题报告要求:需要根据题意来编程得出答案,不可直接给个答案】


*/


/*【解题思路】
数学公式推导:
设变量surplus为当第五个人拿走属于自己的那份后岛上的剩余金币数,surplus的取值范围为1000~2000, 
当第五个人来岛上时岛上剩余的金币数a_5为:a_5 = (surplus + surplus/4)-1;  (其中surplus可被4整除,即surplus%4 == 0)
当第四个人来岛上时岛上剩余的金币数a_5为:a_4 = (a_5 + a_5/4)-1;  (其中a_5可被4整除,即a_5 % 4 == 0)
当第三个人来岛上时岛上剩余的金币数a_5为:a_3 = (a_4 + a_5/4)-1;  (其中a_4可被4整除,即a_4 % 4 == 0)
当第二个人来岛上时岛上剩余的金币数a_5为:a_2 = (a_3 + a_5/4)-1;  (其中a_3可被4整除,即a_3 % 4 == 0)
当第一个人来岛上时岛上剩余的金币数a_5为:a_1 = (a_2 + a_5/4)-1;  (其中a_2可被4整除,即a_2 % 4 == 0)
最后的条件是: (a_1 + 1) % 5 == 0
推导出公式为:a_i = ( a_(i-1) + a_(i-1)/4) - 1; (其中a_i可被4整除,即a_i % 4 == 0)
得出以上规律和条件后,即可编程序解决问题了
得出答案为:3129 
*/


#include<iostream>
using namespace std;


int main()
{
int surplus;//表示每次岛上剩余的金币数 
bool flag;//用于下方surplus是否能被4整除的标志变量 
for(int i = 1000;i < 2000;i++)
{
flag = true;
surplus = i;
for(int j=0;j<5;j++)
{
if(surplus%4 != 0)
flag = false;
surplus = (surplus+surplus/4)-1;
}
if(flag && (surplus+1) % 5 == 0)//如果运算到最后满足题目的条件则输出答案 
cout<<surplus<<endl;
}
return 0;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值