// 输入起始架号和图书数量,得到图书结束架号
int change_Bj(int m, int j);
int main()
{
// p 排号,取值1~26,一排2000
// m 面号,取值1,0,一面1000
// j 架号,取值1~5,一架200
int start_p, end_p;
int start_m, end_m;
int start_j, start_j_output, end_j, end_j_output;
int book_num, book_margin;
char startM, endM;
int i, n, data;
int arr[n];
int p_max, j_max;
// 输入起始架及图书数量
printf("请输入排号最大取值(26或52):");
scanf("%d", &p_max);
printf("请输入每架预计摆放图书数量(200):");
scanf("%d", &j_max);
printf("请依次输入起始排号、面号、架号(空格隔开,如:1 a 1):");
scanf("%d %s %d", &start_p, &startM, &start_j_output);
printf("请输入图书数据个数(如有数据11、22、33,则输入3):");
scanf("%d", &n);
printf("请依次输入图书册数(空格隔开,如:11 22 33):");
for(int i = 0; i < n; i++) {
scanf("%d", &data);
arr[i] = data;
}
if((startM == 'A') || (startM == 'a')){
start_m = 1;
startM = 'A';
}
else if((startM == 'B') || (startM == 'b')){
start_m =0;
startM = 'B';
}
start_j = change_Bj(start_m, start_j_output);
printf("\n排号范围1~%d,AB面,架号范围1~5;\n每架放书%d本,排内摆放顺序为A1→A5→B5→B1\n\n", p_max, j_max);
printf("图书数量,架号分配,尾架余量\n");
// 循环开始
for(int i = 0; i < n; i++){
book_num = arr[i];
end_j = (start_j + (int)(book_num/j_max))%5; //架参数:200, 5
if(end_j == 0){
end_j = 5;
}
end_m = (start_m + (int)((book_num+(start_j-1)*j_max)/(j_max*5)))%2;
if(end_m == 0){
endM = 'B';
}
else{
endM = 'A';
}
if(start_m == 0){
end_p = (start_p + (int)((book_num+(start_j-1)*j_max+(j_max*5))/(j_max*10)))%p_max;
}
else{
end_p = (start_p + (int)((book_num+(start_j-1)*j_max)/(j_max*10)))%p_max;
}
if(end_p == 0){
end_p = p_max;
}
end_j_output = change_Bj(end_m, end_j);
book_margin = j_max-book_num%j_max;
printf("%d,", book_num);
printf("%d排%c面%d架-%d排%c面%d架,", start_p, startM, start_j_output, end_p, endM, end_j_output);
printf("%d\n", book_margin);
start_j = end_j+1;
start_m = end_m;
if (start_j>5 && end_m == 0)
{
start_p = (end_p+1)%p_max;
if(start_p == 0){
start_p =p_max;
}
}
else
{
start_p = end_p;
}
if (start_j>5)
{
start_j = 1;
start_m = (end_m+1)%2;
}
start_j_output = change_Bj(start_m, start_j);
if (start_m == 0)
{
startM = 'B';
}
else
{
startM= 'A';
}
}
return 0;
}
int change_Bj(int m, int j)
{
if(m == 0)
{
return(6-j);
}
else{
return(j);
}
}