编辑代码

// 输入起始架号和图书数量,得到图书结束架号

#include <stdio.h>

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);
    }

}