2018年第九届省赛C/C++A组第5题——打印图形

标题:打印图形

如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形)。

当n=1,2,3的时候,输出如下:

在这里插入图片描述

请仔细分析程序,并填写划线部分缺少的代码。

#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 = _________________________ ; //填空
	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 = 3;
	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;
}

代码

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

void show(char* buf, int t)
{
	int i,j;
	for(i=0; i<t; i++)
	{
		for(j=0; j<t; j++)
		{
			printf("%c", buf[i*t+j]==0? ' ' : 'o');
		}
		printf("\n");
	}
}

void draw(char* buf, int t, int x, int y, int size)
{
//一开始的时候size=t=27
	if(size==1)
	{
		buf[y*t+x] = 1;
		return;
	}
//边界条件是size=0,所以int肯定对size做改变
//	int n = _________________________ ; //填空
	int n=size/3;
	draw(buf, t, x, y, n);
	draw(buf, t, x-n, y ,n);
	draw(buf, t, x+n, y ,n);
	draw(buf, t, x, y-n ,n);
	draw(buf, t, x, y+n ,n);
}

int main()
{
	int N = 3;
	int t = 1;
	int i;
	for(i=0; i<N; i++) t *= 3;//t=27
	char* buf = (char*)malloc(t*t);//申请空间
	for(i=0; i<t*t; i++) buf[i] = 0;//将一维数组全部初始化为0

	draw(buf, t, t/2, t/2, t);
	show(buf, t);
	free(buf);//释放空间

	return 0;
}
posted @ 2019-03-25 20:53  AlexKing007  阅读(219)  评论(0编辑  收藏  举报