标题:请问这题该怎么做
只看楼主
空儿
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-7-3
 问题点数:0 回复次数:7 
请问这题该怎么做
输入可大可小的正方形图案,最外层是第一层,要求每层上用的数字与层数相同。
Input n: 3
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
搜索更多相关主题的帖子: 正方形 
2015-08-15 13:35
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
得分:0 
把这个正方形切成四块,一块一块loop
2015-08-15 14:01
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i, j, m, n;
    printf("Input n: ");
    scanf("%d", &n);
    for(i = 1 - n; i <= n - 1; i++)
    {
        for(j = 1 - n; j <= n - 1; j++)
        {
            m = n - abs(j);
            if(m > n - abs(i))
                m = n - abs(i);
            printf("%d ", m);
        }
        printf("\n");
    }
    return 0;
}
2015-08-15 15:12
柳逸尘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:131
注 册:2015-8-10
得分:0 
回复 3楼 我爱吃青菜
能注释一下  看不怎么懂
2015-08-17 14:22
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
得分:0 
回复 4楼 柳逸尘
这个正方形横竖都是轴对称的,边长为2n-1,所以循环控制我选择1-n到n-1(刚好是2n-1次,而且取绝对值后也是对称的)。
例如n=3,取绝对值后就分别是2 1 0 1 2,用3减去它们就是1 2 3 2 1。就用这个排列稍作改动,打印出各行的数值:令第一行大于1的数都变成1;令第二行大于2的数都变成2;第三行因为没有大于3的数,所以没改变;第四行的控制数回到了2,所以大于2的数都变成2;而第五行是1,所以全部显示1。
表达能力不足,望自己理解。
2015-08-18 22:29
空儿
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-7-3
得分:0 
回复 3楼 我爱吃青菜
#include <stdio.h>
main()
{
     int a,b;
     for(a=1,b=1;a<=100;a++)
     {
         if(b>=20)
             break;
         if(b%3==1)
         {
             b+=3;
             continue;
         }
         b-=5;//请问这里这句是什么意思
     }
        printf("%d",a);
        printf("%d",b);
}
2015-09-22 11:20
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
得分:0 
首先我要知道你这个程序要做什么
for循环里的两个if,一个break,一个continue,总会有一个成立,都会导致程序运行时跳过b-=5,所以这句代码在里面有什么用我也不清楚。
2015-09-22 11:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>

#define MIN(a,b)  ( ((a)<(b)) ? (a) : (b) )

void fun( unsigned n )
{
    for( unsigned i=0; i!=(2*n-1)*(2*n-1); ++i )
    {
        unsigned r = i/(2*n-1);
        unsigned c = i%(2*n-1);
        unsigned v = MIN( MIN(r+1,2*n-1-r), MIN(c+1,2*n-1-c) );

        printf( "%d%c", v, " \n"[(i+1)%(2*n-1)==0] );
    }
}

int main( void )
{
    fun( 3 );

    return 0;
}
2015-09-22 12:24



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




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

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