输入一个int32类型参数n,n>1按如下的例子控制台输出:n=1:1 11 1n=2:1 1 11 2 11 1 1n=3:1 1 1 11 2 2 11 2 2 11 1 1 1n=4:1 1 1 1 11 2 2 2 11 2 3 2 11 2 2 2 11 1 1 1 1

解决方案 »

  1.   


    public static void main(String[] args) {

    int d = 6;//输入的给定输,1234567等
    int k = 6;//最大值范围,
    int c = 0;//最小值范围
    int a[][] = new int[d+1][d+1];
    int aa = k/2+1;
    for(int l=0;l<aa;l++)
    {
    for(int i=c;i<=k;i++)
    {
    for(int j=c;j<=k;j++)
    {
    a[i][j] +=1;
    }
    }
    k -=1;
    c +=1;
    }
    for(int i=0;i<=d;i++)
    {
    for(int j=0;j<=d;j++)
    {
    System.out.print(a[i][j]);
    }
    System.out.println();
    }
    }
      

  2.   

    被人抢了 public static void printMap(int num){
    for (int i = 0; i < num + 1; i++) {
    for (int j = 0; j < num + 1; j++) {
    System.out.printf("%d ",Math.min(Math.min(i + 1, num - i + 1), Math.min(j + 1, num - j + 1))); 
    }
    System.out.println();
    }
    }
      

  3.   

    说下我的思路,首先看例子,是一个2唯矩阵,矩阵的范围是给定数+1,也就是给定5,那么范围就是6*6的矩阵。
    思路就是逐渐的+1,拿n=6,7*7的例子说明,首先矩阵里的所有单位+1,当全部加完的时候,第2轮是向内侧数一圈,也就是横纵坐标的最小值+1,而最大值-1;也就是我定义的k跟c,最后当k/2+1的时候就不再+1了,也就是6/2+1=4,5/2+1=3。大致就是这个思路,用了20分钟左右,好像有点慢呵呵。没办法大学时候线性代数挂科了,基础不好
      

  4.   

    以前看到过一个经典的,借用一下别人的思路:
            public static void main(String args[]){
    int n = 9;
    for(int i = 1-n;i<n;i++){
    for(int j = 1-n;j<n;j++){
    int absi = Math.abs(i);
    int absj = Math.abs(j);
    int k = absi>absj?absi:absj;
    System.out.printf("%2d",n-k);
    }
    System.out.println();
    }
    }
    输出:
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
     1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1
     1 2 3 4 4 4 4 4 4 4 4 4 4 4 3 2 1
     1 2 3 4 5 5 5 5 5 5 5 5 5 4 3 2 1
     1 2 3 4 5 6 6 6 6 6 6 6 5 4 3 2 1
     1 2 3 4 5 6 7 7 7 7 7 6 5 4 3 2 1
     1 2 3 4 5 6 7 8 8 8 7 6 5 4 3 2 1
     1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
     1 2 3 4 5 6 7 8 8 8 7 6 5 4 3 2 1
     1 2 3 4 5 6 7 7 7 7 7 6 5 4 3 2 1
     1 2 3 4 5 6 6 6 6 6 6 6 5 4 3 2 1
     1 2 3 4 5 5 5 5 5 5 5 5 5 4 3 2 1
     1 2 3 4 4 4 4 4 4 4 4 4 4 4 3 2 1
     1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1
     1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      

  5.   

    你每次做一个取余预算我7*7的数组你用了49次预算,我并没有进行那么复杂的运算啊
    我的代码参数为100的时候运行完是78ms,你的是328ms,你自己试一下吧 public static void main(String[] args) {
    long s = System.currentTimeMillis();
    int d = 100;//输入的给定输,1234567等
    int k = 100;//最大值范围,
    int c = 0;//最小值范围
    int a[][] = new int[d+1][d+1];
    int aa = k/2+1;
    for(int l=0;l<aa;l++)
    {
    for(int i=c;i<=k;i++)
    {
    for(int j=c;j<=k;j++)
    {
    a[i][j] +=1;
    }
    }
    k -=1;
    c +=1;
    }
    for(int i=0;i<=d;i++)
    {
    for(int j=0;j<=d;j++)
    {
    System.out.print(a[i][j]);
    }
    System.out.println();
    }
    // printMap(100);
    long e = System.currentTimeMillis();
    System.out.println(e-s);
    }
      

  6.   

    谢谢  lwb314 的研讨态度
    我那个比你慢 第一是  Math.min 调用太多
      第二是 printf 比  print 这个方法要慢很多 你可以试试
      

  7.   


    class CsdnJavaAlgorithm
    {
    public static void main(String[] args) 
    {
    /*
    用户输入i
    行数为i+1,每行为i+1个数
    */
    for(int i=1;i<=5;i++){//行数
    for(int k=1;k<=5;k++){//每行数字个数
    if(i==1||i==5){
    System.out.print(1);//第一行和最后一行打印出1;
    }else if(k==1||k==5){//每行的第一个和最后一个打出1
    System.out.print(1);
    }else{
    if(i==(3)&&k==(3))//最中间的行的 最中间数打出3
    System.out.print(3);
    else 
    System.out.print(5/2);//否则打出2
    }
    }
    System.out.println();
    }

    }
    }
    等下把数字改成变量。
      

  8.   

    修改了下,呵呵这次满足要求了
    没有楼上的高手那么简洁,不过应该比较好理解      public static void print(int num){
    for(int i=0;i<=num;i++){
    for(int j=0;j<=num;j++){
    int min = i<j?i:j;
    int max = i>j?i:j;
    if(i+j<num){
    System.out.print(min+1);
    }else{
    System.out.print(num-max+1);
    }
    }
    System.out.println();
    }
    }
    public static void main(String[] args) {
    print(5);
    } 1 1 1 1 1 1
     1 2 2 2 2 1
     1 2 3 3 2 1
     1 2 3 3 2 1
     1 2 2 2 2 1
     1 1 1 1 1 1
      

  9.   

    恩,看错了,不过我觉得应该是比较大小用的时间比较长,你每次循环都比较3次,就算是3个if循环下来估计也要不少时间,思路也没太看明白,明天早上起来再好好看看 public static void printMap(int num){
            for (int i = 0; i < num + 1; i++) {
                for (int j = 0; j < num + 1; j++) {
                    System.out.print((int)Math.min(Math.min(i + 1, num - i + 1), Math.min(j + 1, num - j + 1))); 
                }
                System.out.println();
            }
        }
    把函数换成这个确实比之前快了,175ms
      

  10.   

    这种题的核心就是根据规律抽取出算术表达式!谈不上算法,只是看抽象能力而已。
    抽象程度越高算法越精简。
    第一步:规律
    1、打印行数列数均为:(n-1)*2
    2、打印数值,为位置到正方形的最近边距(4个边距中最小的)。
       或者距离中心点越近的越大(取距离中心的距离,然后被n-1减一下。)
    第二步:抽象出算术逻辑
    i,j范围:1--(n-1)*2
    到中心点的距离:左右|n-0.5-i|  上下|n-0.5-j|    
    值:n-最近的距离
    第三步:写程序: int n=3;
    for(int i=1;i<=(n-1)*2;i++){
    for(int j=1;j<=(n-1)*2;j++){
    double x= Math.abs(n-0.5-i);
    double y= Math.abs(n-0.5-j);
    if(x>=y){
    System.out.print(n-((int)(x+0.5)));
    }else{
    System.out.print(n-((int)(y+0.5)));
    }
    }
    System.out.println();
    }
    说明抽象的逻辑不一样程序的思路也不一样。抽象的越简单 程序也就越简单。
    当然抽象越简单有时候伴随着的是难以理解。
      

  11.   

    汗!果然看错题目!打印了2n矩阵,貌似n+1矩阵就可以。
    不过这类题的思路和分析方法不会错的。这个更简单更容易理解(但愿没看错这次):借我上遍思路package interview;public class TestPrint2 {
    public static int getMinDistance(int n,int x,int y){
    int west = x;
    int east = n+2-x;
    int north = y;
    int south = n+2-y;
    int xd = west<east?west:east;
    int yd = north<south?north:south;
    return xd<yd?xd:yd;
    }
    public static void main(String[] args) {
    int n=3;
    for(int i=1;i<=n+1;i++){
    for(int j=1;j<=n+1;j++){
    int xx = TestPrint2.getMinDistance(n, i, j);
    System.out.print(xx);
    }
    System.out.println();
    }
    }}
      

  12.   

    优化一下,上面可读性好,但是代码太庞大。public class TestPrint2 {
    public static void main(String[] args) {
    int n=3;
    for(int i=1;i<=n+1;i++){
    for(int j=1;j<=n+1;j++){
    int xx = Math.min(Math.min(i,j),Math.min(n+2-i, n+2-j));
    System.out.print(xx);
    }
    System.out.println();
    }
    }
    }
      

  13.   

    哇塞~都挺牛XX的,偶像~~我来学习学习!!O(∩_∩)O~
      

  14.   

    用c#测试并整理在这儿:
    http://blog.csdn.net/downmoon/archive/2010/07/05/5712679.aspx