#include
#include
#include
#include
#include
using namespace std;
long process(int N,int M,int row,int col,int K)
{
if(row==N||col==M||row<0||col<0)
{
return 0;
}
if(K==0)
{
return 1;
}
long live=process(N,M,row+1,col,K-1);
live+=process(N,M,row-1,col,K-1);
live+=process(N,M,row,col+1,K-1);
live+=process(N,M,row,col-1,K-1);
return live;
}
long gcd(int n,int m)
{
return m ==0?n:gcd(m,n%m);
}
string bob1(int N,int M,int row,int col,int K)
{
long all=pow(4,K);
long live=process(N,M,row,col,K);
long num=gcd(all,live);
double s=live/num+0.0;
double n=all/num+0.0;
double m=s/n*100;
return "存活率为"+to_string(m)+"%";
}
long getvalue2(int N,int M,int row,int col,int K,long*** q);
long process2(int N,int M,int row,int col,int K,long***q);
string bob2(int N,int M,int row,int col,int K)
{
long ***q=new long**[K+1];
for(int i = 0;i < K+1;i++)
{
q[i]=new long*[N];
}
for(int i = 0;i 1;i++) {
for(int j = 0;j < N;j++) {
q[i][j]=new long[M];
}
}
long all=pow(4,K);
long live=process2(N,M,row,col,K,q);
long num=gcd(all,live);
double s=live/num+0.0;
double n=all/num+0.0;
double m=s/n*100;
for(int i = 0;i 1;i++) {
for(int j = 0;j < N;j++) {
delete[] q[i][j];
}
}
for(int i = 0;i < K+1;i++)
{
delete[] q[i];
}
delete[] q;
return "存活率为"+to_string(m)+"%";
}
long process2(int N,int M,int row,int col,int K,long***q)
{
for(int i = 0;i < K+1;i++) {
for(int j = 0;j < 10;j++) {
for(int c = 0;c < 9;c++) {
q[i][j][c]+=getvalue2(N,M,j+1,c,i-1,q);
q[i][j][c]+=getvalue2(N,M,j-1,c,i-1,q);
q[i][j][c]+=getvalue2(N,M,j,c+1,i-1,q);
q[i][j][c]+=getvalue2(N,M,j,c-1,i-1,q);
}
}
}
return q[K][row][col];
}
long getvalue2(int N,int M,int row,int col,int K,long*** q)
{
if(row>=N||col>=M||row<=0||col<=0||K<0)
{
return 0;
}
if(K==0)
{
return 1;
}
return q[K][row][col];
}
int main(int argc, char** argv){
cout<10,9,5,6,10)<10,9,5,6,10);
return 0;
}
代码太多了,请学会调式,主要是
string bob2(int N,int M,int row,int col,int K)
这里下断点,看看参数进来对不对