202209-1 如此编码
题意:第一行给定n和m,表示有n个题目,m表示依据这n个题目的答案计算的结果。第二行给定n个数A1,A2,……An,表示n个题目各自的选项个数。
开辟A,B,C三个大小均为n+1的数组。Ci = 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;
}
天晴了,起飞吧

浙公网安备 33010602011771号