免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: loveguohuasai
打印 上一主题 下一主题

[算法] 母牛数量算法 [复制链接]

论坛徽章:
0
261 [报告]
发表于 2011-03-09 02:50 |只看该作者
本帖最后由 keyjing 于 2011-03-09 03:04 编辑

int sum ; //sum
int n;     // year

if n<=4{
     sum=1;
}
if n<9{
     sum=n-3;
}
if n>8{
     sum=(n-3)+((n-9)+1)(n-9)/2;
}

========================================================
0<n<=4;sum=1

n=5 ; sum = 5-3=2
n=6 ; sum =6-3 =3
n=7 ; sum = 7-3=4
n=8 ; sum = 8-3=5

n=9 ; sum =(9-3)+((9-9)+1)(9-9)/2=6+0=6
n=10 ; sum =(10-3)+((10-9)+1)(10-9)/2=7+2/2=8;
n=11; sum =(11-3)+((11-9)+1)(11-9)/2=8+(3)(2)/2=11;
.............

论坛徽章:
0
262 [报告]
发表于 2013-09-17 11:02 |只看该作者
//在OJ平台上测试了,是正确的
#include<iostream>
using namespace std;
int main()
{
        unsigned long year;
        cin>>year;
        unsigned long f1=0,f2=0,f3=0,f4=0;
        f4=1;
        for(unsigned long i=4;i<=year;i++)
        {
                unsigned long tmp=f3;
                f3=f2;
                f2=f1;
                f1=f4+tmp;
                f4+=tmp;
        }
        cout<<(f1+f2+f3+f4)<<endl;
        return 0;
}

论坛徽章:
0
263 [报告]
发表于 2014-01-02 17:16 |只看该作者
我也尝试写一个。
#include <stdio.h>
#include <stdlib.h>

int cow(int n)
{
        int i, count, m = 1;
        int A[3] = {0, 0, 0};
        int tmp;
        int pos;
       
        for (i = 0; i < n; i++) {
                pos = i % 3;
                tmp = A[pos];
                A[pos] = tmp + m;
                m = m + tmp;
                printf("year %d  1-%d, 2-%d, 3-%d --- %d\n",
                                i, A[0], A[1], A[2],  m);

        }

        count = m;
        count += A[0] + A[1] + A[2];
   return count;       
}

int main(int argc, char *argv[])
{
        printf("\n%s Years cow num %d\n", argv[1], cow(atoi(argv[1])));
        return 0;
}

论坛徽章:
0
264 [报告]
发表于 2014-01-03 16:33 |只看该作者
这个题目我几年前做过,开始用递归很容易,然后找了个规律,用递归验证过了,大概就是个级数吧,记得不太清楚了,当时花了2~3个小时吧.现在想起来那时候,满满的回忆啊..

论坛徽章:
0
265 [报告]
发表于 2014-06-10 13:39 |只看该作者
递归法,可以参考下。
  1. #include <stdio.h>

  2. int getnum(int n,int a[])
  3. {
  4.         int sum=0;

  5.         if(n == 0){
  6.                 return 0;
  7.         }

  8.         n--;

  9.         sum = a[0];

  10.         a[0] = a[0]+a[1];
  11.         a[1] = a[2];
  12.         a[2] = a[3];
  13.         a[3] = sum;

  14.         sum = sum + getnum(n,a);

  15.         return sum;
  16. }


  17. int main()
  18. {
  19.         int n;
  20.         int a[4]={0,0,0,1};
  21.         int num=0;

  22.         printf("enter the years:");
  23.         scanf("%d",&n);

  24.         num = a[0] +a[1] +a[2] +a[3] + getnum(n,a);

  25.         printf("the num is :%d\n",num);
  26. }
复制代码

论坛徽章:
0
266 [报告]
发表于 2014-08-16 12:42 |只看该作者
上面所有人,都没有看我7年前写的算法分析吗?没看过那就看看:在208楼

http://bbs.chinaunix.net/forum.p ... 156&pid=7171495

论坛徽章:
0
267 [报告]
发表于 2023-07-02 13:25 |只看该作者
纪念一下二十年前热闹的母牛问题!

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2021-01-28 16:59:23
268 [报告]
发表于 2023-07-19 16:20 |只看该作者
楼上都当爷爷了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP