A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© songkaihua 中级黑马   /  2014-12-13 22:22  /  1341 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

输出 n=5 的螺旋方阵
1  2  3  4  5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

5 个回复

正序浏览
songkaihua 发表于 2014-12-14 21:53
不是我写的学c的朋友写的。

可不可以说不懂!数组还没学……
回复 使用道具 举报
冥夜 发表于 2014-12-14 21:51
你这个很明显是c 啊。。。。不是自己写的吧。。我写的是

不是我写的学c的朋友写的。
回复 使用道具 举报
你这个很明显是c 啊。。。。不是自己写的吧。。我写的是
  1. import java.util.Arrays;

  2. /*
  3. 1.既然是螺旋走就螺旋赋值。用num保存数字,x为横坐标,y为纵坐标。
  4.   123
  5.   894
  6.   765
  7.   */
  8. public class Luoxuan
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 printLuoxuan(6);
  13.         }

  14.         private static void printLuoxuan(int i)
  15.         {
  16.                 //整体思路,既然是螺旋矩阵就螺旋赋值,num为保存的数字。首先观察到赋值是向右,向下,向左,向上进行赋值,然后每次都重复这个过程直到全部赋值完毕。
  17.                 //每完成一次循环都会使坐标值变化1.所以用count表示圈数来进行赋值
  18.                 int[][] arr=new int[i][i];
  19.                 int num=1;//赋值的数字
  20.             int count=0;//圈数
  21.                 while(num<(i*i+1))//i阶螺旋矩阵总共i*i个数
  22.                 {
  23.                         for(int j=count;j<i-count;j++)//从最左上开始赋值,向右赋值。第一圈纵坐标是0,第二是1.。。
  24.                                 arr[j][count]=num++;
  25.                        
  26.                         for(int j=count+1;j<i-count;j++)//向下赋值,第一圈横坐标是i-1,第二圈是i-2..。
  27.                                 arr[i-count-1][j]=num++;
  28.                                
  29.                         for(int j=i-count-2;j>count-1;j--)//向左赋值,第一圈纵坐标是i-1,第二圈是i-2。。。
  30.                                 arr[j][i-count-1]=num++;
  31.                        
  32.                         for(int j=i-count-2;j>count;j--)//向上赋值,第一圈横坐标是0,第二圈是1.。。
  33.                                 arr[count][j]=num++;
  34.                         count++;//走完一圈圈数+1
  35.                 }
  36.                
  37.                 for(int y=0;y<i;y++)
  38.                 {
  39.                         for(int x=0;x<i;x++)
  40.                         {
  41.                                 System.out.print(arr[x][y]+"\t");
  42.                         }
  43.                         System.out.println();
  44.                 }
  45.         }
  46. }
复制代码
回复 使用道具 举报

#include <stdio.h>
int main(void)
{
               
        int n,r,d,u;
        //定义top为螺旋方阵的牵引数,写入数组的索引,count为数据螺旋的计数
        int top = 0,count = 0;
        //定义二维数据为10*10的默认方阵
        int[][] cercle[10][10];
        printf("请选择要打印的螺旋方阵参数n(n小于10)!\n");
        scanf("%d",n);
        for(int i = 0;i < n/2;i++)
        {

                count++;
                for(int j = count;j < n;j++)
                {
                        //计数
                        top++;
                        //给cercle数组第i行j列的位置赋值
                        cercle[j] = top;
                        //标记第i行最后一个赋值数的列数为r
                        r = j;       
                }
                for(int k = count;k < n;k++)
                {
                        //计数
                        top++;
                        //给cercle数组第k行r列的位置赋值
                        cercle[k][r] = top;
                        //标记第r列最后一个赋值数的行数为d
                        d = k;
                }
                for(int l = n;l > count;l--)
                {
                        //计数
                        top++;
                        //给cercle数组第d行l列的位置赋值
                        cercle[d][l] = top;
                        //标记第l列最后一个赋值数的行数为u
                        u = l;
                }
                for(int m = n;m > count;m--)
                {
                        //计数
                        top++;
                        //给cercle数组第u行m列的位置赋值
                        cercle[m] = top;
                }
        }

        //打印二维数组
        for(int a = 0;a < 10;a++)
        {
                for(int b = 0; b < 10;b++)
                {
                        //逐个打印数组数据
                        printf("%d",cercle[a]);
                }
                //打印回车符,隔开每一行
                printf("\n");
        }
}


昨天一大神做的!你看看!不过他用的是c
回复 使用道具 举报
好像挺难的。。:Q
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马