Submission
Status:
---xx
Score: 0
User: dwad
Problemset: ชั้นหนังสือ
Language: c
Time: 0.002 second
Submitted On: 2024-10-08 15:23:58
#include <stdio.h>
#include <string.h>
#define MAX_NBOOK 100
#define MAX_LBOOK 100
int main() {
int nbook, lbook;
scanf("%d %d", &lbook, &nbook);
// Check for valid input
if (lbook <= 0 || nbook <= 0 || nbook > MAX_NBOOK || lbook > MAX_LBOOK) {
printf("Invalid input.\n");
return 1;
}
char book[MAX_NBOOK][MAX_LBOOK];
int cbook[MAX_NBOOK];
for (int i = 0; i < nbook; i++) { // loop for scan the numbook & name_book
scanf("%d %s", &cbook[i], book[i]);
}
int sumbook = 0;
for (int i = 0; i < nbook; i++) { // calculate total number of books
sumbook += cbook[i];
}
// Fill book array according to count
int bookcount = nbook; // Start from nbook
for (int i = 0; i < nbook; i++) {
for (int j = 1; j < cbook[i]; j++) {
strcpy(book[bookcount], book[i]);
bookcount++;
}
}
// Bubble sort to sort the books
for (int i = 0; i < sumbook - 1; i++) {
for (int j = 0; j < sumbook - i - 1; j++) {
if (strcmp(book[j], book[j + 1]) > 0) {
char temp[MAX_LBOOK];
strcpy(temp, book[j]);
strcpy(book[j], book[j + 1]);
strcpy(book[j + 1], temp);
}
}
}
char grid[MAX_LBOOK + 2][2 * sumbook + 1];
for (int i = 0; i < MAX_LBOOK + 2; i++) {
for (int j = 0; j < 2 * sumbook + 1; j++) {
grid[i][j] = '|';
if ((i == 0 || i == MAX_LBOOK + 1) && j % 2 == 0) {
grid[i][j] = '+';
}
if ((i == 0 || i == MAX_LBOOK + 1) && j % 2 == 1) {
grid[i][j] = '-';
}
}
}
for (int i = 0; i < sumbook; i++) {
if (i % 2 == 0) {
for (int j = 0; j < strlen(book[i]); j++) {
if (j + 1 > lbook) break;
grid[j + 1][2 * i + 1] = book[i][j];
}
for (int j = strlen(book[i]); j < lbook; j++) {
grid[j + 1][2 * i + 1] = '.';
}
} else {
for (int j = 0; j < strlen(book[i]); j++) {
if (lbook - j < 1) break;
grid[lbook - j][2 * i + 1] = book[i][j];
}
for (int j = strlen(book[i]); j < lbook; j++) {
grid[lbook - j][2 * i + 1] = '.';
}
}
}
for (int i = 0; i < MAX_LBOOK + 2; i++) {
for (int j = 0; j < 2 * sumbook + 1; j++) {
printf("%c", grid[i][j]);
}
printf("\n");
}
return 0;
}