关于malloc 的持续申请。
题目大意:第一年有一头牛,每头牛可以活9年,在第四年的时候开始生小牛,让你输入一个n,求第n年的时候有多少头牛。
思路:用malloc函数申请空间。
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
using namespace std;
int main()
{
int *c=(int *)malloc(sizeof(int)*1000);// 初始化长度
int *ca=(int *)malloc(sizeof(int)*1000);//
c[0]=1;
ca[0]=1;
int x;
printf("请输入要求哪一年牛的数量:");
scanf("%d",&x);
int ans=0;
int size = 1000;
int d=1;
int n=1;
for(int i = 2;i <= x;i++)
{
for(int j = 0;j < n;j++)
{
if(c[j]==1)
{
ca[j]++;
}
if(ca[j]>=9)
{
c[j]=0;
}
else if(ca[j]>=4&&c[j]==1)
{
c[d]=1;
ca[d++]=1;
if(d >= size)
{
int *pc=(int *)malloc(sizeof(int)*2*size);//再次申请
int *pca=(int *)malloc(sizeof(int)*2*size);//
for(int k = 0;k < d;++k)
{
pc[k]=c[k];
pca[k]=ca[k];
}
free(c);
free(ca);
c=pc;
ca=pca;
size=2*size;
}
}
}
n=d;
}
for(int i = 0;i < n;i++)
{
if(c[i]==1)
ans++;
}
printf("这一年牛的数量是:%d\n",ans);
free(c);
free(ca);
return 0;
}