| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1785 人关注过本帖, 1 人收藏
标题:这个图形 怎么打印出来
只看楼主 加入收藏
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
并不复杂啊!因为有规律可循啊。下面程序在VS2005 C++中通过。
#include <iostream>
void main()
{
    int num=20;  //num:3~20 这个数字表示矩阵 把下面的21改掉,可以出来更大的图形
    int i=1;
    int j=num;
    int k='X';
    int l=1;
    int m=1;
    char prnt[21][21];
    for (i=1;i<=j;i++,j--)
    {
        for (l=i;l<=j;l++)
        {
            prnt[i][l]=k;
            prnt[l][i]=k;
            prnt[l][j]=k;
            prnt[j][l]=k;
        }
        k++;
        if (k=='Z')
            k='0';
    }
    for (i=1;i<=num;i++)
    {
        for (l=1;l<=num;l++)
        {
            printf("%c ",prnt[i][l]);
        }
        printf("\n\r");
    }
    getchar();
}

[ 本帖最后由 cnfarer 于 2010-1-20 20:24 编辑 ]

★★★★★为人民服务★★★★★
2010-01-20 19:14
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
回复 7楼 风吹过b
真有面耐心啊!!!

★★★★★为人民服务★★★★★
2010-01-20 19:23
xingfeng0623
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2009-9-17
收藏
得分:0 
为什么是prnt[21][21]?
2010-01-20 22:35
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
这个并不重要,20也可以,但下面的循环得从0开始。(个人习惯而已)

★★★★★为人民服务★★★★★
2010-01-21 08:03
_DaNciNg_
Rank: 2
等 级:论坛游民
帖 子:81
专家分:28
注 册:2009-3-30
收藏
得分:0 
不知道楼主还会不会注意
我的想法是这样的
观察这个图形的特点,正方形的,圆心对称
所以可以按照这个,由对角线分成4份,然后只要写出一个三角形的函数就可以了,而且,这个三角形的函数还是非常好写的
再根据矩阵坐标变换的规律,就可以做出整个图了吧。
还有,不知道11楼的做法可以做出不,不知道楼主试了没,如果有的话 ,麻烦告诉我一声。
2010-01-30 23:56
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
下边我用递归写了个,没编译过,思路基本这样,你可以改一下
#include<stdio.h>
const int i=0;
static char c='X';
char a[30][30];
void func(char a[30][30],int ln,int rn,int ln1,int rn1)//ln和rn是左上角坐标,ln1和rn是右下角坐标
{
int j;
for(j=0;j<rn1-rn;j++)
a[ln][rn+j]=c+(i++);
for(j=0;j<rn1-rn;j++)
a[ln1][rn+j]=c+(i++);
for(j=0;j<ln1-ln;j++)
a[ln+j][rn]=c+(i++);
for(j=0;j<ln1-ln;j++)
a[ln+j][[rn1]=c+(i++);
if(c=='Y')c='0';
if(ln<ln1&&rn<rn1)
func(a,ln+1,rn+1,ln1-1,rn1-1)
}
void main()
{
int n,k,m;
printf("请输入N值:");
scanf("%d",&n);
func(a,0,0,n-1,n-1);
for(k=0;k<n;k++)
for(m=0;m<n;m++)
printf("%d ",a[k][m]);
printf("\n");
}


顺境逆境切莫止境,得意失意切莫在意。
2010-01-31 12:05
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
修改一下:const int i=0;改成static int i=0;
if(c=='Y')c='0';改成if((c+i)=='Y'){c='0';i=0;}



顺境逆境切莫止境,得意失意切莫在意。
2010-01-31 12:10
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用pangding在2010-1-14 16:04:23的发言:

呵呵,有空我想想~
有点事过境迁了,不过最近还是有空了。所以編了一下,不能食言嘛。
其实很容易:
程序代码:
#include <stdio.h>

int main(int argc, char *argv[])
{
    char cs[] = "XY0123456789";
    int n, i, j;

    scanf("%d", &n);
    if (n < 3 || n > 20) return 1;

    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
            if (j < i)
                printf("%c ", cs[j+i < n ? j : n-i-1]);
            else
                printf("%c ", cs[j+i < n ? i : n-j-1]);

        putchar('\n');
    }

    return 0;
}

2010-01-31 19:53
快速回复:这个图形 怎么打印出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017144 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved