java 区有一面试题,要输出如下矩阵,有何解法,给出的代码不对

bobo364 2010-06-04 10:24:02
java 区有一面试题,要输出如下矩阵,有何解法,给出的代码不对
555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555
#include<stdio.h>

void juzheng(int size);

int main()
{
juzheng(5);
system("pause");
return 0;
}

void juzheng(int size)
{
int k,i,j;
int a[size][size];
k=size;
for(i=0;i<size*2;i++)
{
for(j=0;j<size*2;j++)
{
while(k>0)
{
if(i=size-k||j==size-k||i==size*2-1||j==size*2-1)
{
a[i][j]=k;
--k;
}
}
}
}
for(i=0;i<size*2;i++)
{

for(j=0;j<size*2;j++)
{
printf("%d",a[i][j]);
}
}
}
...全文
207 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2010-06-05
  • 打赏
  • 举报
回复
看不懂几位高人的代码.=,=..太巧妙了.
我是把矩阵分成1/4,算出来,然后根据对称性打印的.
cattycat 2010-06-05
  • 打赏
  • 举报
回复
还是星辰老大的代码简单。
zxg2006 2010-06-05
  • 打赏
  • 举报
回复
螺旋方阵……
bobo364 2010-06-05
  • 打赏
  • 举报
回复
好的,谢谢楼上各位,这可能是我见过的最难的面试题了
happytang 2010-06-04
  • 打赏
  • 举报
回复
递归
#include<stdio.h>
#include <stdlib.h>
#define N 5
void hui(int n, int i, int (*auc)[2*N-1])
{
auc[i - 1][i - 1] = n + 1 - i;
for (int j = 0; j < n * 2 - 1; j++)
{
auc[i - 1][j] = n + 1 - i;
auc[n * 2 - i - 1][j] = n + 1 - i;
auc[j][i - 1] = n + 1 - i;
auc[j][n * 2 - i - 1] = n + 1 - i;
}
if (i > 1)
hui(n, i - 1, auc);
}

void main()
{
int auc[2*N-1][2*N-1] = {0};
int i,j;
hui(N, N, auc);
for (i=0;i<2*N-1;i++)
{
for (j=0;j<2*N-1;j++)
{
printf("%2d",auc[i][j]);
}
printf("\n");
}
system("pause");
}
东莞某某某 2010-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jixingzhong 的回复:]
从最中间的1开始填充数组;
预定义数组大小为N,该数组初始化为全0,且a[0]
  • 和a
  • [*][0]废弃不使用,参考如下:


    C/C++ code
    #define N 5
    void juzheng(int size);

    int main()
    {
    juzheng(N);
    system("pause");
    return 0;
    }

    ……
    [/Quote]

    这个最容易理解了,呵呵
npuhuxl 2010-06-04
  • 打赏
  • 举报
回复
或许还可以通过对称矩阵方式来输出把!
npuhuxl 2010-06-04
  • 打赏
  • 举报
回复
for(int i = 0; i < 9; ++ i)
{
int k = 5;
int p = i <= 4 ? i : (8 - i);
for(int j = 0; j < p; ++ j)
std::cout<<k--;

for(int j = 0; j < 9 - 2 * p; ++ j)
std::cout<<k;
for(int j = 0; j < p; ++ j)
std::cout<<++k;
std::cout<<std::endl;
}
selooloo 2010-06-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#define N 9
void print(int (*a)[N],int col,int n)
{
int len=1+n>>1;
if(len>0){
int d;
for(d=0;d<=n-1;++d)
a[col][col+d]=a[col+d][col]=a[col+n-1][col+d]=a[col+d][col+n-1]=len;
print(a,col+1,n-2);
}
}
int main(void)
{
int a[N][N]={0};
int i,j;
print(a,0,N);
for(i=0;i!=N;++i,putchar('\n'))
for(j=0;j!=N;++j)
printf("%3d",a[i][j]);
getchar();
return 0;
}
qq120848369 2010-06-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

int main()
{
int a[5][5];
int i,j,k;
for(i=0;i<5;++i)
{
a[0][i]=5;
}
for(j=1;j<5;++j)
{
a[j][0]=5;
}

for(i=1;i<5;++i)
{
for(j=i;j<5;++j)
{
a[j][i]=a[i-1][i]-1;
}
for(j=i;j<5;++j)
{
a[i][j]=a[i-1][j]-1;
}
}
for(i=0;i<5;++i)
{
for(j=0;j<5;++j)
{
printf("%d",a[i][j]);
}
for(j=3;j>=0;--j)
{
printf("%d",a[i][j]);
}
printf("\n");
}
for(i=3;i>=0;--i)
{
for(j=0;j<5;++j)
{
printf("%d",a[i][j]);
}
for(j=3;j>=0;--j)
{
printf("%d",a[i][j]);
}
printf("\n");
}
return 0;
}


别问我为什么- -.
我用时间换空间.
jixingzhong 2010-06-04
  • 打赏
  • 举报
回复
从最中间的1开始填充数组;
预定义数组大小为N,该数组初始化为全0,且a[0]
  • 和a
  • [*][0]废弃不使用,参考如下:

    #define N	5
    void juzheng(int size);

    int main()
    {
    juzheng(N);
    system("pause");
    return 0;
    }

    void juzheng(int size)
    {
    int k,i,j,num=1;
    int a[N*2][N*2]={0};
    for(i=size;i>0;i--)
    {
    for(j=1;j<size*2;j++)
    {
    a[i][j]=num;
    a[j][i]=num;
    a[size*2-i][j]=num;
    a[j][size*2-i]=num;
    }
    num++;
    }
    for(i=1;i<size*2;i++)
    {
    for(j=1;j<size*2;j++)
    {
    printf("%d",a[i][j]);
    }
    printf("\n");
    }
    }
bobo364 2010-06-04
  • 打赏
  • 举报
回复
就是用c重写
bobo364 2010-06-04
  • 打赏
  • 举报
回复
补充一下,我要的是的c的代码
z569362161 2010-06-04
  • 打赏
  • 举报
回复
这里是C区啊!你来错地方了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧