一道考试题,1到25数字按 5x5 格式输出

Triumph 2018-03-27 10:46:39
要求输出格式为:
01 02 03 04 05
16 17 18 19 06
15 24 25 20 07
14 23 22 21 08
13 12 11 10 09

10以下的数可以不加前导0,我是为了对齐加上的。

你要说用 5 个输出语句也对,不过肯定 0 分。

我试了试,完全没头绪,特请教各位高手!
...全文
282 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
AlbertS 2018-03-27
zhua
引用 1 楼 cfjtaishan 的回复:
#include <stdio.h>

#define ROW     5
#define COL     5

int main()
{
    int a[ROW][COL],num,count;
    int i, j, k, kend, lend;

    num = ROW;
    kend = num / 2;
    lend = num;
    count=1;
    for( i=0,j=0,k=0; k<kend; k++ )
    {
        a[i][j]=count++;

        for(j++;j<lend;j++)
            a[i][j]=count++;

        for(i++,j--;i<lend;i++)
            a[i][j]=count++;

        for(i--,j--;j>=k;j--)
            a[i][j]=count++;

        for(i--,j++;i>k;i--)
            a[i][j]=count++;

        i++;j++;lend--;
    }
    if(num%2 != 0) a[i][j]=count;
    for( i=0; i<num; i++ )
    {
        for( j=0; j<num; j++ )
            printf("%4d ",a[i][j]);
        printf("\n");
    }

    return 0;
}
参考一下吧 https://blog.csdn.net/qq_27183003/article/details/49699463 更多参考
+1 转圈赋值,然后统一输出就行,貌似是大一时候的题
  • 打赏
  • 举报
回复
自信男孩 2018-03-27
#include <stdio.h>

#define ROW     5
#define COL     5

int main()
{
    int a[ROW][COL],num,count;
    int i, j, k, kend, lend;

    num = ROW;
    kend = num / 2;
    lend = num;
    count=1;
    for( i=0,j=0,k=0; k<kend; k++ )
    {
        a[i][j]=count++;

        for(j++;j<lend;j++)
            a[i][j]=count++;

        for(i++,j--;i<lend;i++)
            a[i][j]=count++;

        for(i--,j--;j>=k;j--)
            a[i][j]=count++;

        for(i--,j++;i>k;i--)
            a[i][j]=count++;

        i++;j++;lend--;
    }
    if(num%2 != 0) a[i][j]=count;
    for( i=0; i<num; i++ )
    {
        for( j=0; j<num; j++ )
            printf("%4d ",a[i][j]);
        printf("\n");
    }

    return 0;
}
参考一下吧 https://blog.csdn.net/qq_27183003/article/details/49699463 更多参考
  • 打赏
  • 举报
回复
Tw!light 2018-03-27
经过修改,本程序支持任意的M,N(除了0以外的正整数)。上面的程序缺不支持,比如6*5 #include <stdio.h> #include <math.h> #define M 6 #define N 5 void fun(); int main() { fun(); return 0; } //m*m void fun() { int arry[M][N] = {0}; int i,j,k; int cnt = 1;//1--M*M //for(i = 0;i < (int)(M*1.0/2 +0.5);i++){ for(i = 0;i < ceil(sqrt(M*M+N*N)/2);i++) { for(j=i,k=i;k < N-i;k++){ arry[j][k] = cnt; cnt++; } for(j=i+1,k=N-1-i;j<M-i;j++){ arry[j][k] = cnt; cnt++; } for(j=M-1-i,k=N-2-i;k>=0+i;k--){ arry[j][k] = cnt; cnt++; } for(j=M-2-i,k=0+i;j>=1+i;j--){ arry[j][k] = cnt; cnt++; } } for(i=0;i < M;i++){ for(j=0;j < N;j++) printf("%02d ",arry[i][j]); printf("\n"); } }
  • 打赏
  • 举报
回复
Tw!light 2018-03-27
看了一下楼上的,确实没有楼上的好,这只是我临时想起来的,有待优化
  • 打赏
  • 举报
回复
Tw!light 2018-03-27
#include <stdio.h> #define M 5 //M可以为别的值 void fun(); int main() { fun(); return 0; } //m*m void fun() { int arry[M][M] = {0}; int i,j,k; int cnt = 1;//1--M*M for(i = 0;i < (int)(M*1.0/2 +0.5);i++){ for(j=i,k=i;k < M-i;k++){ arry[j][k] = cnt; cnt++; } for(j=i+1,k=M-1-i;j<M-i;j++){ arry[j][k] = cnt; cnt++; } for(j=M-1-i,k=M-2-i;k>=0+i;k--){ arry[j][k] = cnt; cnt++; } for(j=M-2-i,k=0+i;j>=1+i;j--){ arry[j][k] = cnt; cnt++; } } for(i=0;i<M;i++){ for(j=0;j<M;j++) printf("%02d ",arry[i][j]); printf("\n"); } }
  • 打赏
  • 举报
回复
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
申请成为版主
帖子事件
创建了帖子
2018-03-27 10:46
社区公告
暂无公告