0

有人可以帮我解决这个问题吗:我有一条线 i,一个一维数组 p 和一个二维数组(矩阵)Q。所以,问题是我必须用来自 Q 的线 i 初始化一维数组 p,而不使用 for -环形。我怎样才能做到这一点?

    void simVarDiscr(int m, int *x, double *p){//m is the number of elements of x and p
    int i;
    for(i=0;i<m;i++){
        x[i]=i;
        init_genrand(254);//is a function from Mersenne-Twister algorithm
        p[i]=genrand_int32()%m;
    }
}
int LantMarkov(int m,double *pi0,float **Q){
    int *s,k,j;double *p;
    s=(int *)malloc(n*sizeof(int));
    p=(double *)calloc(m,sizeof(double));
    simVarDiscr(m,s,pi0);
    j=s[0];
    for(k=0;k<n;k++){
        memcpy(p, Q[j], m);
        simVarDiscr(m,s,p);
        j=s[k];
    }
4

1 回答 1

0

答案取决于对您的问题的解释:“在不使用 for 循环的情况下使用 Q 中的 i 行初始化一维数组 p” - 因为您的代码没有使用循环p中的行进行初始化。Qfor

  • 循环可以forwhile循环甚至递归代替。

  • 如果您更改其中一个pQ它们兼容的类型(例如 both float),您可以使用tomemcpy复制 from ;我不确定这对您有帮助,因为您的代码中已经有一些(有 2 个错误,因此不起作用)。Qpmemcpy

  • 您可以删除 的内存分配p,并让它指向 ; 中的一行Q。这不需要循环。例如:

-

void simVarDiscr(int m, int *x, float *p) // changed from double to float
{
    ... // No change in code
}

int LantMarkov(int m,double *pi0,float **Q)
{
    ...
    for(k=0;k<n;k++){
        p = Q[j];
        // The following code changes p and j'th row of Q in the same manner
        ...
    }
}
于 2013-05-19T22:41:03.903 回答