黑马程序员技术交流社区

标题: 一道算法题 螺旋的升级版 [打印本页]

作者: 李跃达    时间: 2013-1-24 21:06
标题: 一道算法题 螺旋的升级版
本帖最后由 李跃达 于 2013-1-24 21:34 编辑

从键盘上输入数字,螺旋三角打印 比如输入5 则打印
1   2   3   4   5
  12  13  14   6
  11  15   7
  10   8
   9
作者: 许晓华    时间: 2013-1-25 09:02
哥们,你是搞软件大赛的吗?
  1. import java.io.*;
  2. import java.util.Scanner;
  3. public class triAn//这里改成自己的类名
  4. {
  5. static int [][]M=new int[30][30];//矩阵,用来保存数
  6. static int idx=1;
  7. public static void main(String[] args) throws IOException
  8. {
  9. int i,j,n = 0;
  10. Scanner sc=new Scanner(System.in);
  11. while(sc.hasNextInt())
  12. {
  13. idx=1;
  14. n=sc.nextInt();
  15. tri(0,0,n);//递归螺旋填充矩阵
  16. for(i=0;i<n;i++)//打印
  17. {
  18. for(j=0;j<n-i;j++)
  19. System.out.printf("%-4d",M[i][j]);//列宽为4,左对齐
  20. System.out.println();
  21. }
  22. }
  23. }
  24. public static void tri(int r,int c,int n)//从坐标(r,c)的元素开始三角填数,每递归调用一次,填最外圈的一个三角,三角形上边长为n
  25. {
  26. int i;
  27. if(n<=0)
  28. return;
  29. for(i=0;i<n;i++)//填充三角形上边长
  30. {
  31. M[r][c+i]=idx++;
  32. }
  33. for(i=1;i<n;i++)//填充三角形斜边长
  34. {
  35. M[r+i][c+n-1-i]=idx++;
  36. }
  37. for(i=2;i<n;i++)//填充三角形左边长
  38. {
  39. M[r+n-i][c]=idx++;
  40. }
  41. tri(r+1,c+1,n-3);//递归
  42. }
  43. }

复制代码
输入5和10时,结果如下:





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2