sicily 1029

素颜马尾好姑娘i 2022-08-06 08:12 255阅读 0赞

思路:首先创建两个函数operate() 和cycle(),其中operate()求得两个大数之和,cycle()将数组向后平移一位。首先初始化数组num,数组num存储兔子的数量,其中num[0]表示成熟兔子的数量,num[i]表示出生第i个月的数量。分别表示出第i个月不同种类兔子的数量,而后依次递推(第i个月中出生x个月兔子的数量等于第i-1个月出生x-1个月兔子的数量),直至到达第m个月。最后把数组num中所有的元素(除去最后一个)相加既得到兔子的总数。

程序

#include
#include “string”
using namespace std;

string operate(string a,string b) //求两个大数之和
{
int aa = a.length();
int bb = b.length();
string result; //用来保存两个string 的和
string q;
//保证两个数的长度相等,长度小的补0
if (aa>bb)
{
q.assign(aa-bb,’0’); //assagin函数为c++中的赋值函数
b=q+b;
}
else
{
q.assign(bb-aa,’0’);
a=q+a;
}
//两数相加
int u = 0; //u为进位
result = result.assign(a.length(),’0’);
for (int i = a.length()-1;i>=0;i—)
{
int temp = (a[i] - ‘0’) + (b[i] - ‘0’) + u;
if(temp >=10)
{
u = 1;
temp = temp%10;
}
else
u = 0;

result[i] = temp + ‘0’;
}
//如果最后一位出现大于10的情况时,应该向前进一位
if(u ==1)
result= ‘1’+result;

return result;
}
void cycle(string num[],int n) //把数组num里面第数向后平移一位,并且新的num[0]等于旧的num[0]与新的num[n-1]之和
{
for(int i=n-1;i>0;i—)
num[i]=num[i-1];

num[0]=operate(num[0],num[n-1]);
}
int main()
{
int m,d;
while(cin>>m>>d)
{
if(m==0&&d==0)
break;
string num[11]; //数组num存储兔子的数量,其中num[0]表示成熟兔子的数量,num[i]表示出生第i个月的数量
string sum=”0”;
num[0]=”1”;
for(int i=1;i<=m;i++) //初始化数组num
num[i]=”0”;
for(int i=1;i<=d;i++) //求第i个月各种类的数量
cycle(num,m+1);

  1. for(int i=0;i<m;i++) //求得所有兔子之和,此时num\[0\]中已经包含了num\[m\]的数量
  2. sum=operate(num\[i\],sum);
  3. cout<<sum<<endl;
  4. \}

return 0;
} 



发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sicily 1029

    思路:首先创建两个函数operate() 和cycle(),其中operate()求得两个大数之和,cycle()将数组向后平移一位。首先初始化数组num,数组num存储兔子的

    相关 [sicily] 1001. Alphacode

    ![这里写图片描述][20160511210803993] 题目大意: 假设有一规则:’A’ 设为1,’B’设为2,以此类推, ‘Z’设为26。按照这个规则给一串英文字母

    相关 URAL 1029

    题目大意:M层N列的矩阵(各元素均为正整数),找出一个路径从第一层到达第M层,使得路径上的所有数的和是所有可达路径中最小的,每次上到下一层以后就不能再上去,依次输出路径上的各点