QJ410 - Vẽ hình
Xem dưới dạng PDFBà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