标题:关于一道C编程题,求解
只看楼主
jackjtjt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-3
结帖率:100%
已结贴  问题点数:20 回复次数:12 
关于一道C编程题,求解

***********
*         *
* ******* *
* *     * *
* * *** * *
* * * * * *
* * *** * *
* *     * *
* ******* *
*         *
***********

观察这个图形,它是由一系列正方形的星号方框嵌套而成。
在上边的例子中,最外方框的边长为11。

本题的任务就是从标准输入获得一个整数n(1<n<100)
程序则生成嵌套着的回字型星号方框。其最外层方框的边长为n

例如:
输入:
5
程序输出:
*****
*   *
* * *
*   *
*****

输入:6
程序输出:
******
*    *
* ** *
* ** *
*    *
******

求解如何实现呢?
搜索更多相关主题的帖子: 正方形 
2013-04-03 18:59
jackjtjt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-3
得分:0 
应该是蓝桥杯的赛题,现在还是没有好的解法,求助,求助~
2013-04-03 19:45
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
得分:0 
最笨的 最没有效率的办法 用一个n*n的数组模拟呗
全部填完了 在一起打印

其他 还没有想到什么好的办法 除非你能写出每个坐标点是空格还是* 关于变量n的方程
这是最牛逼的方法

人生是一场错过 愿你别蹉跎
2013-04-03 20:05
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:10 
#include<stdio.h>
int main()
{
    int num,i,j,k=0;
    char str[30][30]={'\0'};
    scanf("%d",&num);
    for(i=0;i<(num+1)/2;i++)
    {
        if(i%2==0)
        {
            for(j=k;j<num-k;j++)
            {
                str[k][j]='*';
                str[num-1-k][j]='*';
            }
            for(j=k;j<num-k;j++)
            {
                str[j][k]='*';
                str[j][num-1-k]='*';
            }
            k=k+2;
        }
    }
    for(i=0;i<num;i++)
    {
        for(j=0;j<30;j++)
        {
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
    return 0;
}

小小战士,战士中的战斗机!
2013-04-03 20:06
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
#include<stdio.h>
int main()
{
    int num,i,j,k=0;
    char str[30][30]={'\0'};
    scanf("%d",&num);
    for(i=0;i<(num+1)/2;i++)
    {
        if(i%2==0)
        {
            for(j=k;j<num-k;J++)
            {
                str[k][j]='*';
                str[num-1-k][j]='*';
            }
            for(j=k;j<num-k;J++)
            {
                str[j][k]='*';
                str[j][num-1-k]='*';
            }
            k=k+2;
        }
    }
    for(i=0;i<num;I++)
    {
        for(j=0;j<30;j++)
        {
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
    return 0;
}


[ 本帖最后由 小小战士 于 2013-4-3 20:09 编辑 ]

小小战士,战士中的战斗机!
2013-04-03 20:06
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
for(i=0;i<(num+1)/2;i++)
     {
         if(i%2==0)
         {
             for(j=k;j<num-k;j++)
             {
                 str[k][j]='*';
                 str[num-1-k][j]='*';
             }
             for(j=k;j<num-k;j++)
             {
                 str[j][k]='*';
                 str[j][num-1-k]='*';
             }
             k=k+2;
         }
     }
这个可是核心代码,采用数组进行复制*

Maybe
2013-04-03 20:16
jackjtjt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-3
得分:0 
以下是引用小小战士在2013-4-3 20:06:46的发言:

#include
int main()
{
    int num,i,j,k=0;
    char str[30][30]={'\0'};
    scanf("%d",&num);
    for(i=0;i<(num+1)/2;i++)
    {
        if(i%2==0)
        {
            for(j=k;j
谢谢!
2013-04-03 21:17
旺旺佳佳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:44
注 册:2013-3-11
得分:0 
C语言这样好玩
2013-04-03 21:47
旺旺佳佳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:44
注 册:2013-3-11
得分:0 
我试了两个代码为什么不行啊?
2013-04-03 21:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:10 
回复 3楼 fanpengpeng
这个如何?
程序代码:
#include<stdio.h>

int blank(int n, int i, int j)
{
    n--;
    if(n - i < i) i = n - i;
    if(n - j < j) j = n - j;
    return (i < j ? i : j) & 1;
}

int main()
{
    int n, i, j;
    scanf("%d", &n);
    for(i = 0; i < n; i++, puts(""))
    for(j = 0; j < n; j++) putchar(blank(n, i, j) ? ' ' : '*');
    return 0;
}

重剑无锋,大巧不工
2013-04-03 22:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402988-1-1.html




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

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