設置 | 登錄 | 註冊

目前共有4篇帖子。

【试题】打印十字图

1樓 巨大八爪鱼 2016-3-15 16:03
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *arr;
int len, n;

void draw_h(int x, int y, int hlen)
{
    int p = y * len + x;
    while (hlen--)
        arr[p++] = '$';
}

void draw_v(int x, int y, int hlen)
{
    int p = y * len + x;
    while (hlen--)
    {
        arr[p] = '$';
        p += len;
    }
}

void draw(int layer)
{
    int xl = layer * 2;
    int xr = len - 1 - xl;
    int yt = (layer - 1) * 2;
    int yb = len - 1 - (layer - 1) * 2;
    int border = 5 + (n - layer) * 4;
    
    // 图案第一行(以及倒数第一行)
    draw_h(xl, yt, border);
    draw_h(xl, yb, border);
    
    // 图案第二行 (以及倒数第二行)
    draw_h(xl, yt + 1, 1);
    draw_h(xr, yt + 1, 1);
    draw_h(xl, yb - 1, 1);
    draw_h(xr, yb - 1, 1);
    
    // 图案第三行(以及倒数第三行)
    draw_h(xl - 2, yt + 2, 3);
    draw_h(xr, yt + 2, 3);
    draw_h(xl - 2, yb - 2, 3);
    draw_h(xr, yb - 2, 3);
    
    // 两边的竖线
    draw_v(xl - 2, yt + 2, border);
    draw_v(xr + 2, yt + 2, border);
}

int main(void)
{
    int x, y, size;
    char *pArr;
    scanf("%d", &n);
    len = 5 + 4 * n;
    
    size = len * len * sizeof(char);
    pArr = arr = (char *)malloc(size);
    
    // 画每一层图案(不是每一行)
    memset(arr, '.', size);
    for (x = 1; x <= n; x++)
        draw(x);
        
    // 画中心十字
    draw_v(2 * n + 2, len / 2 - 2, 5);
    draw_h(2 * n, len / 2, 5);
    
    for (y = 0; y < len; y++)
    {
        for (x = 0; x < len; x++)
            putchar(*pArr++);
        putchar('\n');
    }
    free(arr);
    return 0;
}
2樓 巨大八爪鱼 2016-3-15 16:03
评测结果  正确
得分  100 

一个图案一个图案画就行了,不要一行一行画。
3樓 巨大八爪鱼 2016-3-15 16:04
10
..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$..
..$.......................................$..
$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$
$...$...................................$...$
$.$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$.$
$.$...$...............................$...$.$
$.$.$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$.$.$
$.$.$...$...........................$...$.$.$
$.$.$.$$$.$$$$$$$$$$$$$$$$$$$$$$$$$.$$$.$.$.$
$.$.$.$...$.......................$...$.$.$.$
$.$.$.$.$$$.$$$$$$$$$$$$$$$$$$$$$.$$$.$.$.$.$
$.$.$.$.$...$...................$...$.$.$.$.$
$.$.$.$.$.$$$.$$$$$$$$$$$$$$$$$.$$$.$.$.$.$.$
$.$.$.$.$.$...$...............$...$.$.$.$.$.$
$.$.$.$.$.$.$$$.$$$$$$$$$$$$$.$$$.$.$.$.$.$.$
$.$.$.$.$.$.$...$...........$...$.$.$.$.$.$.$
$.$.$.$.$.$.$.$$$.$$$$$$$$$.$$$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$...$.......$...$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$$$.$$$$$.$$$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$...$...$...$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$.$$$.$.$$$.$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$.$...$...$.$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$.$.$$$$$.$.$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$.$...$...$.$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$.$$$.$.$$$.$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$...$...$...$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$.$$$.$$$$$.$$$.$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$...$.......$...$.$.$.$.$.$.$.$
$.$.$.$.$.$.$.$$$.$$$$$$$$$.$$$.$.$.$.$.$.$.$
$.$.$.$.$.$.$...$...........$...$.$.$.$.$.$.$
$.$.$.$.$.$.$$$.$$$$$$$$$$$$$.$$$.$.$.$.$.$.$
$.$.$.$.$.$...$...............$...$.$.$.$.$.$
$.$.$.$.$.$$$.$$$$$$$$$$$$$$$$$.$$$.$.$.$.$.$
$.$.$.$.$...$...................$...$.$.$.$.$
$.$.$.$.$$$.$$$$$$$$$$$$$$$$$$$$$.$$$.$.$.$.$
$.$.$.$...$.......................$...$.$.$.$
$.$.$.$$$.$$$$$$$$$$$$$$$$$$$$$$$$$.$$$.$.$.$
$.$.$...$...........................$...$.$.$
$.$.$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$.$.$
$.$...$...............................$...$.$
$.$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$.$
$...$...................................$...$
$$$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$$
..$.......................................$..
..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$..

--------------------------------
Process exited after 1.411 seconds with return value 0
Press any key to continue . . .
4樓 巨大八爪鱼 2016-3-16 23:00

回復3樓 @巨大八爪鱼 的內容:

10
..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$..
..$.......................................$.....
排版太乱了。。。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。