---
# System prepended metadata

title: Quiz 13
tags: [程設一quiz]

---

Quiz 13
===
# [A]
## Explanation
## Code
```c=
#include <stdio.h>

int main(){
    int arr[500][500];
    char end;
    int row, col;
    int srow, scol, erow, ecol;
    int printed = 0;

    while(1){
        scanf("%c", &end);
        while(!((end == '*') || ((end >= '0') && (end <= '9')))){ //不得到空白及換行
            scanf("%c", &end);
        }
        if(end == '*'){
            break;
        }

        row = (int)end - (int)'0';
        scanf("%c", &end);
        if(end != ' '){ //若row為二位數
            row = row * 10 + (int)end - (int)'0';
        }

        scanf("%d %d %d %d %d", &col, &srow, &scol, &erow, &ecol);
        for(size_t i=0; i<row; i++){
            for(size_t j=0; j<col; j++){
                scanf("%d", &arr[i][j]);
            }
        }

        if(printed){
            puts("");
        }
        else{
            printed = 1;
        }

        for(size_t i=srow; i<=erow; i++){
            for(size_t j=scol; j<=ecol; j++){
                if(j == ecol){
                    printf("%d\n", arr[i][j]);
                }
                else{
                    printf("%d ", arr[i][j]);
                }
            }
        }
    }

    return 0;
}
```


# [B]
## Explanation
## Code
```c=
#include <stdio.h>

int main(){
    int arr[500][500];
    char end;
    int row, col, s_row, s_col, step;
    int printed = 0;
    int max;

    while(1){
        scanf("%c", &end);
        while(!((end == '*') || ((end >= '0') && (end <= '9')))){
            scanf("%c", &end);
        }
        if(end == '*'){
            break;
        }

        row = (int)end - (int)'0';
        scanf("%c", &end);
        if(end != ' '){
            row = row*10 + (int)end - '0';
        }

        scanf("%d %d %d %d", &col, &s_row, &s_col, &step);
        for(size_t i=0; i<row; i++){
            for(size_t j=0; j<col; j++){
                scanf("%d", &arr[i][j]);
            }
        }

        if(printed){
            puts("");
        }
        else{
            printed = 1;
        }

        for(size_t i=0; i<row; i+=step){
            if(i+s_row > row){
                break;
            }
            for(size_t j=0; j<col; j+=step){
                if(j+s_col > col){
                    break;
                }

                max = -1;
                for(size_t sight_i=i; sight_i<(i+s_row); sight_i++){
                    for(size_t sight_j=j; sight_j<(j+s_col); sight_j++){
                        if(arr[sight_i][sight_j] > max){
                            max = arr[sight_i][sight_j];
                        }
                    }
                }

                if(j+step+s_col > col){
                    printf("%d\n", max);
                }
                else{
                    printf("%d ", max);
                }
            }
        }
    }
}
```


# [C]
## Explanation
## Code
```c=
#include <stdio.h>
#include <stdlib.h>

int main(){
    int start, height, end;
    int *blocks;
    int s_block, e_block;

    int cases, components;
    scanf("%d", &cases);

    for(int case_count=1; case_count<=cases; case_count++){
        scanf("%d", &components);

        blocks = calloc(10001, sizeof(int));
        s_block = 10000;
        e_block = 0;
        for(int component=0; component<components; component++){
            scanf("%d %d %d", &start, &height, &end);

            if(start < s_block){
                s_block = start;
            }
            if(end > e_block){
                e_block = end;
            }

            for(int i=start; i<end; i++){
                if(blocks[i] < height){
                    blocks[i] = height;
                }
            }
        }

        printf("Case %d:", case_count);
        height = 0;
        for(int i=s_block; i<=e_block+1; i++){
            if((i == s_block) || (blocks[i] != height)){
                height = blocks[i];
                printf(" %d %d", i, height);
            }
        }
        puts("");
        free(blocks);
    }
}
```

###### tags: `程設一quiz`