QJ410 - Vẽ hình

Xem dưới dạng PDF

Gửi bài giải

Điểm: 100
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Kiểu bài tập

Bài này là bài điền khuyết hoàn thiện mã nguồn. Hãy hoàn thiện mã nguồn được cho trong đề, sao chép vào khung mã ở bên phải, chọn ngôn ngữ biên dịch tương ứng (C/Java) rồi nộp bài. Nếu mã nguồn cho trong đề có nhiều hơn một ngôn ngữ thì chỉ cần chọn một trong số đó để hoàn thiện và nộp. Sau khi sao chép, cần xóa dấu gạch dưới ở phần điền khuyết trong mã nguồn và điền đáp án của bạn vào. Nếu sau khi nộp mà không được chấp nhận, ngoài việc kiểm tra lỗi ở phần điền khuyết, còn cần lưu ý xem có phải do khi sao chép đã làm thay đổi phần không phải điền khuyết gây ra lỗi hay không.

Chương trình dưới đây sẽ vẽ một hình fractal (hình tự đồng dạng giữa tổng thể và cục bộ) trên màn hình console. Khi $n=1,2,3$, kết quả xuất ra như dưới đây, hãy phân tích kỹ chương trình và điền vào phần mã còn thiếu ở chỗ gạch dưới.

Kết quả xuất ra khi $n=1$
 o
ooo
 o
Kết quả xuất ra khi $n=2$
    o
   ooo
    o
 o  o  o
ooooooooo
 o  o  o
    o
   ooo
    o
Kết quả xuất ra khi $n=3$
             o
            ooo
             o
          o  o  o
         ooooooooo
          o  o  o
             o
            ooo
             o
    o        o        o
   ooo      ooo      ooo
    o        o        o
 o  o  o  o  o  o  o  o  o
ooooooooooooooooooooooooooo
 o  o  o  o  o  o  o  o  o
    o        o        o
   ooo      ooo      ooo
    o        o        o
             o
            ooo
             o
          o  o  o
         ooooooooo
          o  o  o
             o
            ooo
             o
#include <stdio.h>
#include <stdlib.h>
void show(char* buf, int w){
    int i,j;
    for(i=0; i<w; i++){
        for(j=0; j<w; j++){
            printf("%c", buf[i*w+j]==0? ' ' : 'o');
        }
        printf("\n");
    }
}

void draw(char* buf, int w, int x, int y, int size){
    if(size==1){
        buf[y*w+x] = 1;
        return;
    }

    int n = _________________________ ; //điền khuyết
    draw(buf, w, x, y, n);
    draw(buf, w, x-n, y ,n);
    draw(buf, w, x+n, y ,n);
    draw(buf, w, x, y-n ,n);
    draw(buf, w, x, y+n ,n);
}

int main()
{
    int N ;
        scanf("%d",&N);
    int t = 1;
    int i;
    for(i=0; i<N; i++) t *= 3;

    char* buf = (char*)malloc(t*t);
    for(i=0; i<t*t; i++) buf[i] = 0;

    draw(buf, t, t/2, t/2, t);
    show(buf, t);
    free(buf);

    return 0;
}
import java.util.Scanner;

public class Main
{
    static void show(byte[][] buf){
        for(int i=0; i<buf.length; i++){
            for(int j=0; j<buf[i].length; j++){
                System.out.print(buf[i][j]==0? ' ' : 'o');
            }
            System.out.println();
        }
    }

    static void draw(byte[][] buf, int x, int y, int size){
        if(size==1){
            buf[y][x] = 1;
            return;
        }

        int n = ________________________ ;  // điền khuyết
        draw(buf, x, y, n);
        draw(buf, x-n, y ,n);
        draw(buf, x+n, y ,n);
        draw(buf, x, y-n ,n);
        draw(buf, x, y+n ,n);
    }

    public static void main(String[] args){
                Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int t = 1;
        for(int i=0; i<N; i++) t *= 3;

        byte[][] buf = new byte[t][t];
        draw(buf, t/2, t/2, t);
        show(buf);
    }
}

Nhận xét

Không có ý kiến tại thời điểm này.