2020-1-8-分鱼问题

分鱼问题

/*
    有五个人分一堆鱼,平均分成五份,多出一条,将其扔掉,然后一个人拿走一份,直到最后一个人 ,求这堆鱼的总数

*/
#include<iostream>
using namespace std;
void   fish_total()
{
    int num[5];
   for(num[0]=1;;num[0]++)  /*改进   1,num[0]必须是五的倍数 , 所以 num[0]+=5 可以更节省时间 初始值6*(5/4)^4=15*/
   {
     if(num[0]%5!=1)                /*枚举可以写成一个for 循环 */
        continue ;
     num[1]=(num[0]-1)/5*4;         /* for(i=1;i<=4;i++)        */
     if(num[1]%5!=1)                 /* num[i]=(num[i-1]-1)/5*4 ; */
       continue ;
     num[2]=(num[1]-1)/5*4;             /* if(num[i]%5!=1)  */
     if(num[2]%5!=1)
         continue ;                           /*break ;*/
     num[3]=(num[2]-1)/5*4;
        if(num[3]%5!=1)                      /* if(i<=4) */
             continue ;                            /* continue ;*/
        num[4]=(num[3]-1)/5*4;
        if(num[4]%5!=1)
            continue;
        break ;
    }
    cout<<num[0]<<endl ;
}
void fish_total2()
{
    /* 上面是按照扔鱼的正向顺序思考的 ,也可以反向思考 */
    int num2[5];
    for(num2[4]=6;;num2[4]+=5)       /* num[4]枚举的步数为5,同时又是4的倍数,步长=5 * 4 =20 也可以是 4 * 4 = 16*/
    {
       int i=4;
       for(;i>=1;i--)
       {
          if(num2[i]%4!=0)
            break ;
          num2[i-1]=num2[i]/4*5+1;
       }
       if(i>=1)
        continue ;
        break ;
    }
    cout<<num2[0]<<endl ;


}
int  main()
{

    fish_total() ;
    fish_total2() ;
    return  0 ;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值