天天看點

一道數列算法

輸入是整數數列N1,N2,N3...,要求輸出是B1,B2,B3..., 其中他們的關系滿足下式

        B1 =  N2*N3*N4*...

        B2 =  N1*N3*N4*...

        B3 =  N1*N2*N4*...

 要求用較好的算法實作。

void NtoB(int N[],int B[],int len){  //考慮了數為0的情況

  int tmp = 1, i;

  for(i = 1; i < len; i++){

    if(N[i] == 0){

      for(int j = 0; j < i; j++) B[j] = 0;

      for(int j = i+1; j < len; j++) B[j] = 0;

      for(int j = i+1; j < len; j++){

        if(N[j] == 0) {

           B[i] = 0;

           return;

        }

        else tmp *= N[j];

      }

      B[i] = tmp * N[0];  

      return;

    }

    else tmp *= N[i];

  }

  B[0] = tmp;

  if (N[0] == 0){

    for(int j = 1; j < len; j++) B[j] = 0;

    return;

  }

  else for(int j = 1; j < len; j++) B[j] = B[j-1]/B[j] * B[j-1];

  return;

繼續閱讀