免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
198 [报告]
发表于 2006-09-07 15:32 |只看该作者
贴一个我的答案阿:
呵呵!应该比较节省资源哦!
我没有用递归的方法,我是针对这组数据的特点进行计算的。
#include<stdio.h>
   int fun(int n)
       {
         int i,sum,tmp;     / sum 最后的结果 , i , tmp  中间量
         sum=n-3;           /  第一只牛第四年才可以每年生小牛
         tmp=0;         
         if(n<=3)             / 如果计算的年限小于等于3年
            sum+=0;
         else                   / 计算的年限大于3年
         {
         for(i=1;i<=sum-3;i++)       /所有的奶牛都要第四年生小牛, 所以sum-3 。
                                 /不同年头出生的牛,他们依次生出的牛的数目递减 如10年,4 ,3 , 2 , 1
            {
               tmp+=i;
             }
          }
         sum+=tmp;                     /计算最后的总结果
         return sum;

       }

   int main()
       {
          int n;
          printf("Please Input the n:\n");    / 提示输入计算的年数
          scanf("%d",&n);
          printf("The Result Is :%d\n",fun(n));

        }
是不是资源消耗很小阿!

论坛徽章:
0
197 [报告]
发表于 2006-08-19 22:35 |只看该作者

非递归算法

int _calc(n)
{
        int a[4]={1,0,0,0};
        int i,sum=0,tmp;
        for(i=1; i<n; i++){
                a[3]=a[2]+a[3];
                tmp=a[0];
                a[0]=a[3];
                a[2]=a[1];
                a[1]=tmp;
               
        }
        sum=a[0]+a[1]+a[2]+a[3];
        return sum;
}

int main()
{
        int n=30;
        printf("%d\n",_calc(n));
        return 0;
}

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
196 [报告]
发表于 2006-07-05 15:50 |只看该作者
不需要那么麻烦吧,就是一个简单的命题:
每4年,母牛数量翻番,计算n年后有多少母牛。


  1. // 就是计算 2^(n/4)
复制代码

论坛徽章:
0
195 [报告]
发表于 2006-06-30 12:29 |只看该作者
原帖由 czx1124 于 2006-6-24 21:35 发表
用数学等比数列算,我的答案year=100,cow=33554432
#include<iostream.h>
int js(int);
int main()
{int cow,year;
cout<<"Input  year:";
cin>>year;
if (year>3&&am ...



我用计算器计算的结果也是33554432,不会写程序啊,HOHO~

论坛徽章:
0
194 [报告]
发表于 2006-06-24 21:35 |只看该作者

偶的算法: 是个等比是列吧 我觉得

用数学等比数列算,我的答案year=100,cow=33554432
#include<iostream.h>
int js(int);
int main()
{int cow,year;
cout<<"Input  year:";
cin>>year;
if (year>3&&year<12
{year=year-year%4;   //4年生一次,超过4年N倍按4年N倍算
cow=js(year);
cout<<"cow="<<cow;
return 0;
}
else if(year<1)
        cout<<"input is wrong";
else if(year<4&&year>0)
        cout<<"cow is:1";
else cout<<"input year is too big";
}
int js(int n)   //计算生的牛
{int i,b,c;
b=(n/4)+1;
c=1;   
/*这是等比数列吧,1,2,4,8…………用公式a(n)=a(0)*q的(n-1)次方  q:公比 ,a(0):首项  */
for(i=1;i<b;++i) //算q的N-1次方
    { c=2*c;
      }
return c;
}

[ 本帖最后由 czx1124 于 2006-6-24 21:41 编辑 ]

论坛徽章:
0
193 [报告]
发表于 2006-06-23 08:00 |只看该作者
只有在N/4=整数的时候母牛才会生小牛,题目没有给出母牛早产或难产

论坛徽章:
0
192 [报告]
发表于 2006-06-23 07:58 |只看该作者
年数N

2的(N/4)次方

每次生3头母牛的,就是3的(N/4)次方。

论坛徽章:
0
191 [报告]
发表于 2006-06-20 17:05 |只看该作者
强阿
好算法

论坛徽章:
0
190 [报告]
发表于 2006-06-19 23:51 |只看该作者

非递归!

main(){
    int  x1,x2,x3,x4,a1,a2,a3,a4,t,s,i;
    x1=0;
    x2=0;
    x3=0;
    x4=1;
    a1=0;
    a2=0;
    a3=0;
    a4=0;
    s=0;
    scanf("%d",&t);
    if(t<5)
      s=1;
    else
      {
       for(i=1;i<=(t-4);i++)
       {
          a1=x1;
          a2=x2;
          a3=x3;
          a4=x4;
          x1=a4;
          x2=a1;
          x3=a2;
          x4=a3+a4;
          s=x1+x2+x3+x4;
        }
       }
    printf("\n#####%d#####\n",s);

}



50            3951206
100           566194214
Bluetea 该用户已被删除
189 [报告]
发表于 2006-06-17 06:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP