public class MonstersNum {
int[][] matrix;
public int calculate(int m, int n) {
matrix = new int[n + 1][2];
matrix[0][0] = 0;
matrix[0][1] = 0;
matrix[1][0] = 1;
matrix[1][1] = 1;
for (int i = 2; i <= n; i++) {
matrix[i][1] = m * matrix[i - 2][0];
if (i < 5) {
matrix[i][0] = m * matrix[i - 2][0] + matrix[i - 1][0];
} else {
matrix[i][0] = m * matrix[i - 2][0] + matrix[i - 1][0] - matrix[i-5][1];
}
}
return matrix[n][0];
}
public static void main(String[] args){
MonstersNum monstersNum = new MonstersNum();
for(int i=1;i<=10;i++)
System.out.println(monstersNum.calculate(1,i));
}
}
public class Test {
public static void main(String[] args) {
/*
* 某星球上出现了一种怪物, 这种怪物是单亲繁殖,从出生起第3个月起每个月就能繁衍一批后代共m个,但是这种怪物很短命,生存第5个月后就会毙命。
* 目前该星球有一个这样的怪物,请编写程序计算n个月后怪物的总数。(这里我们假定第5个月怪物繁衍后再毙命)
* */
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();//月数
int m = scanner.nextInt();//每次繁衍的个数
int[] arr = new int[6];
arr[1] = 1;
for(int i = 4;i <= month;i++){
arr[5] = arr[4];
arr[4] = arr[3];
arr[3] = arr[2];
arr[2] = arr[1];
arr[1] = arr[3] + arr[4] + arr[5];
}
int sum = 0;
for(int i = 1;i < arr.length;i++){
sum += arr[i];
}
System.out.println(sum);
}
} int SumOFMonster(int n,int m)
{
vector<int> T={1,0,0,0};
vector<int> Temp;
int S=0;
for(int i=0;i<n;++i)
{
Temp=T;
T[0]=m*(Temp[2]+Temp[3]);
T[1]=Temp[0];
T[2]=Temp[1];
T[3]=Temp[2];
S=T[0]+T[1]+T[2]+T[3];
}
return S;
}
public class MonstorTest {
/**
* 计算怪兽在month月之后的数量
*
* @param month
* 月数
* @param per
* 每只怪兽一次产出数
* @return
*/
public int monstor(int month, int per) {
int amount = 0;
int[] data = new int[month];
data[0] = 1;
for (int i = 2; i < month; i++) {
int j = i;
while (j >= 0) {
if (j >= i - 4 && j <= i - 2) {
data[i] += data[j] * per;
}
if (j <= i - 4) {
data[j] = 0;
}
j--;
}
}
for (int in : data) {
amount += in;
System.out.print(in + "\t");
}
return amount;
}
public static void main(String[] args) {
System.out.println(new MonstorTest().monstor(7, 10));
}
}
#include <iostream> using namespace std; int sum(int n,int m) { int res=1; int A[100]; A[0]=1; A[1]=0; A[2]=0; if(n<3) return res; for(int i=3;i<=n;i++) { A[i]=(res-A[i-1]-A[i-2])*m; res+=A[i]; if(i>=5) res-=A[i-5]; } return res; } int main() { int n,m; cin>>n>>m; cout<<sum(n,m)<<endl; return 0; }