Edwiner 发表于 2021-9-13 21:17:26

这题怎么做啊

这题怎么做啊,算法的不会啊

大马强 发表于 2021-9-13 21:48:33

这个数学问题呀
我有一个想法
因为是求至少是多少只,不妨第五个野人分的鸟的数量是6只
因为 这六只是第4个野人分五份扔一只后拿走其中一份剩下的,那么第四人分的鸟的数量应该是 5 除以 五分之四 加一
后面的以此类推
数学较差,有误请指教

不能懒 发表于 2021-9-13 22:01:40

从后面倒数回来就好 ,假设最后的为N,那么第五个人就是5*(N+1),第四个就是5*(5*(N+1)+1),第三个5*(5*(5*(N+1)+1)+1),第二个5*(5*(5*(5*(N+1)+1)+1)+1),第一个5*(5*(5*(5*(5*(N+1)+1)+1)+1)+1),再把N最小代入

Max472 发表于 2021-9-13 22:49:15

大马强 发表于 2021-9-13 21:48
这个数学问题呀
我有一个想法
因为是求至少是多少只,不妨第五个野人分的鸟的数量是6只


都是整只的,没有小数
第五人最少有16只,也就是第四人分了5组(先不管他扔掉的那只,这个是在确定第五人的数量),拿走了一组后剩下的4组,共16只
第五人共16只,分成5组,每组3只余的1就是被扔掉的那只

2736946915 发表于 2021-9-14 00:06:17

如图,注意注释,用逆向思维反过来写

傻眼貓咪 发表于 2021-9-14 00:35:57

本帖最后由 傻眼貓咪 于 2021-9-14 10:36 编辑

一共 296 隻鳥


野人醒來順序 鳥的數量 丟掉1隻,再平分5人,扣除野人拿走自己那份
第一個野人醒來 296 (59+59+59+59+59-1)/5
第二個野人醒來 236 (47+47+47+47+47-1)/5
第三個野人醒來 141 (28+28+28+28+28-1)/5
第四個野人醒來 56 (11+11+11+11+11-1)/5
第五個野人醒來 11 (2+2+2+2+2-1)/5


第一個野人拿走 59 隻鳥
第二個野人拿走 47 隻鳥
第三個野人拿走 28 隻鳥
第四個野人拿走 11 隻鳥
第五個野人拿走 2 隻鳥

好像也不對{:5_99:}

jhq999 发表于 2021-9-14 07:41:59

傻眼貓咪 发表于 2021-9-14 00:35
本帖最后由 傻眼貓咪 于 2021-9-14 00:38 编辑
一共 296 隻鳥



236-48=188

jhq999 发表于 2021-9-14 07:46:53

int main( )
{
int i=6,j=0,n=0,m=0;
while (true)
{
        n=i;
        for ( j = 0; j < 5; j++)
        {
                if (1!=n%5)break;
                m=(n-1)/5;
                n--;
                n-=m;

        }
        if (5==j)
        {
                break;
        }
        i++;
}
return 0;
}
3121不知道对不对

心驰神往 发表于 2021-9-14 08:15:22

傻眼貓咪 发表于 2021-9-14 00:35
本帖最后由 傻眼貓咪 于 2021-9-14 00:38 编辑
一共 296 隻鳥



你确定是这样的?

来自星星的小明 发表于 2021-9-14 09:02:12

{:10_277:}

晴雨皆宜 发表于 2021-9-14 09:06:16

学习了{:5_95:}

江湖散人 发表于 2021-9-14 09:10:48

你这题和菜鸟教程的题非常像,建议你去看一下。
这个属于数学问题。只要把数学问题搞定了,程序自然就出来了。
如果只是给 你程序,数学问题没解决,下次你碰到这样的问题,你还是不会。

jhanker 发表于 2021-9-14 09:39:27

本帖最后由 jhanker 于 2021-9-14 09:46 编辑


#include <stdio.h>
int main()
{
int i,j,k;
        for(i=1;;i++)//设最后分到手每个人 i 只
        {       
                k=i*5+1; //倒推第一次
                for(j=1;j<5;j++) //倒推分四次 j表示倒推次数
                {
                        if(k%4==0)
                              k=k/4*5+1;
                        else
                                break;
                }
                if(k%5==1 && j==5 )
                {
                        printf("野人一个打了%d只鸟",k);
                        break;
                }
        }
        return 0;
}

村里小黑 发表于 2021-9-14 09:43:34

本帖最后由 村里小黑 于 2021-9-14 09:50 编辑

int main()
{
unsigned int i=0,j=0,k=0,n=0,m=0;
for(i=0;i<20000;i++)
{
   for(j=1;j<6;j++)
{
   n=i-j*(k+1);
   k=n-k/5;
   m=k%5;
      if(m!=0)
      {
         j=7
      }
      if(j==5&&m==0)
   {
          printf("%d",i);
          i=20001;
      }
}

}
}
刚看到敲得,不知道是否正确,欢迎指正

jhanker 发表于 2021-9-14 09:45:36

对不对没算过,你可以自己算算看。这是反推的算法,前面楼上的正推的算法你也可以试试

niuniuniu666 发表于 2021-9-14 10:21:39

3121.0
6246.0
9371.0
12496.0
15621.0
18746.0
21871.0
24996.0
28121.0
31246.0
34371.0

傻眼貓咪 发表于 2021-9-14 10:35:27

jhq999 发表于 2021-9-14 07:41
236-48=188

好像也不對{:5_99:}

傻眼貓咪 发表于 2021-9-14 10:36:00

心驰神往 发表于 2021-9-14 08:15
你确定是这样的?

好像也不對{:5_99:}

jhq999 发表于 2021-9-14 10:51:31

本帖最后由 jhq999 于 2021-9-14 11:00 编辑

jhanker 发表于 2021-9-14 09:39



#include <stdio.h>
int main()
{
int i,j,k;
      for(i=1;;i++)//设最后分到手每个人 i 只
      {      
                k=i*5+1; //倒推第一次
                for(j=1;j<5;j++) //倒推分四次 j表示倒推次数
                {
                        if(k%4==0)
                              k=k/4*5+1;
                        else
                              break;
                }
                if(k%5==1 && j==5 )
                {
                        printf("野人一个打了%d只鸟",k);
                        break;
                }
      }
      return 0;
}
k%4==0的由来:
f(k)-1-(f(k)-1)/5=f(k-1)
=>4f(k)-4=5*f(k-1)
=>f(k)=(5*f(k-1))/4+1
=》f(k)要想得到整数解f(k-1)必须被4整除

niuniuniu666 发表于 2021-9-14 11:04:54

for i in range(1,1000): #第五个人拿走鸟的数量区间
    s = i * 5 + 1
    n = 1
    while n < 4:
      t = s / 4
      s = t*5 + 1
      n += 1
      if s%4 != 0:
            break
    if s%4 == 0 and n == 4:
      t = s / 4
      s = t*5 + 1
      print(s){:10_302:}{:10_302:}{:10_302:}{:10_302:}{:10_302:}{:10_302:}
3121.0
6246.0
9371.0

页: [1] 2
查看完整版本: 这题怎么做啊