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; }
天晴了,起飞吧