202209-1 如此编码

题意:第一行给定n和m,表示有n个题目,m表示依据这n个题目的答案计算的结果。第二行给定n个数A1,A2,……An,表示n个题目各自的选项个数。

开辟A,B,C三个大小均为n+1的数组。C= A1 x A2 x A3 x …… x Ai.      m = C0 x B1 + C1 x B2 + …… + Cn-1 x Bn.  

则有

m % C1 = C0 x B1;

m % C2 = C0 x B1 + C1 x B2;

m % C3 = C0 x B1 + C1 x B2 + C2 x B3;

……

故有

B1 = ( m %C1 ) / C0;

B2 = [(m % C2) - (m % C1) ] / C1;

……

Bi = [(m % Ci) - (m % Ci-1)] / Ci-1;

输出B1到Bn即可。

#include <iostream>

using namespace std;

int main()
{
    int n,m;
    cin>>n>>m;
    int *A = (int*)malloc(sizeof(int)*(n+1));
    int *C = (int*)malloc(sizeof(int)*(n));
    int *B = (int*)malloc(sizeof(int)*(n+1));
    C[0]=1;
    for(int i=1;i<=n;i++){
        cin>>A[i];
        C[i] = C[i-1] * A[i];
    }
    for(int i=1;i<=n;i++){
        if(i == 1){
            B[1] = m % C[1];
        }
        else{
            int tmp = m % C[i-1];
            B[i] = ((m % C[i]) - tmp ) / C[i-1];
        }
    }
    for(int i=1;i<=n;i++){
        if(i==1) cout<<B[i];
        else cout<<" "<<B[i];
    }
    cout<<endl;
    return 0;
}

  

posted @ 2023-01-01 15:18  yyer  阅读(55)  评论(0编辑  收藏  举报