Submission

Status:
PPPPP

Score: 100

User: TirpitZ

Problemset: ชั้นหนังสือ

Language: c

Time: 0.051 second

Submitted On: 2024-09-27 21:48:04

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct novel
{     int num;
       char name[31];   };
struct out
{    char name[31];  };

int main()
{
    int high,nofn;
    scanf("%d %d",&high,&nofn);
    struct novel book[nofn];       //tell the variable type 'novel' name variable is 'book'

    for(int i=0;i<nofn;i++)             //loop for scan name book& numbook  :)
    {  scanf("%d",&book[i].num);
        scanf("%s",&book[i].name);      }
        //gets(book[i].name); }

    /*for(int i=0;i<nofn;i++)
    {   printf("%s %d\n",book[i].name, book[i].num);    }
*/
    char tempname[31];
    int tempnum;
    int k=0;
    int sum=0;
    char temp1,temp2;
    int tot_book=0;
    int num_left=0;

    int swap;  // 0 = ไม่ต้อง swap ,  1 = ต้อง swap
        for(int i=0;i<nofn;i++)
        {
            for(int k=i+1;k<nofn;k++)   //ไล่หนังสือที่...
            {   swap= 1;
                for(int p=0;p<31;p++)
                {
                    temp1=book[i].name[p];
                    temp2=book[k].name[p];
                    //printf("%d %d book[i] = %c %d : book[k] = %c %d\n",i,k,temp1,temp1,temp2,temp2);
                    if(temp1<temp2) {   swap=0; break; }  // ไม่ต้อง swap
                    if(temp1>temp2)  break; // ต้อง swap
                    // ถ้าเท่ากัน ก็ต้อง check ตัว char ที่ p ถัดไป
                    // ASC of '\0'  = 0  so ถ้าจบคำก่อน ก็จะน้อยกว่าเสมอ
                }
                if(swap==1)
                {   //printf("swap\n");
                    strcpy(tempname,book[i].name);
                    strcpy(book[i].name,book[k].name);
                    strcpy(book[k].name,tempname);
                    tempnum=book[i].num;
                    book[i].num=book[k].num;
                    book[k].num=tempnum;         }
            }

            /*printf("%d :\n",i);
            for(int r=0;r<nofn;r++)    {   printf("%s %d\n",book[r].name, book[r].num);     } */
        }

   /* for(int i=0;i<nofn;i++)
    {
        printf("%s %d\n",book[i].name, book[i].num);
    }*/

    for(int i=0;i<nofn;i++)
    {
        tot_book=tot_book+book[i].num;
    }
    //printf("%d",tot_book);
    struct out disp[tot_book];
    k=0;    num_left=book[k].num;
    for(int i=0;i<tot_book;i++)
    {
        strcpy(disp[i].name,book[k].name);
        num_left=num_left-1;
        if(num_left==0)
        {         k++;        num_left=book[k].num;        }
    }

    char temp[high+1];
    int len;

    for(int i=0;i< tot_book;i++)
    {
        len=strlen(disp[i].name);
        if(i%2==0)
        {
            for(int p=len;p<high;p++)
            {
                disp[i].name[p]='.';
            }
        }
        else
        {
            strcpy(temp,disp[i].name);
            for(int p=0;p<high-len;p++)
            {
                disp[i].name[p]='.';
            }
            for(int p=high-len;p<high;p++)
            {
                disp[i].name[p]=temp[high-p-1];
            }
        }
    }
    //for(int i=0;i<tot_book;i++)    printf("%d:{%s}\n",i,disp[i].name);



    printf("+");
    for(int i=0;i<tot_book;i++)     printf("-+");
    printf("\n");


    for(int i=0;i<high;i++)
    {
        printf("|");
        for(int k=0;k<tot_book;k++)     {   printf("%c|",disp[k].name[i]); }
        printf("\n");
    }

    printf("+");
    for(int i=0;i<tot_book;i++)     printf("-+");

}