首页 > 其他 > 详细

蛇形填数

时间:2015-10-22 23:58:15      阅读:478      评论:0      收藏:0      [点我收藏+]

一、输出N*N列蛇形数,如

技术分享         技术分享
难点在于蛇形圈数,如下
技术分享                 技术分享
N为10时,圈数为5;N为5时,圈数为3
再推可得出结论:圈数K=(N+1)/2
当N=10时,(int)K=(10+1)/2=5;
当N=5时,(int)K=(5+1)/2=3。
 
代码如下:
  1. #include<stdio.h>
  2. #define N 10
  3. int main()
  4. {
  5. int a[N][N]={0};//初始化全为0
  6. int data=1;
  7. for(int i =0, j =0, k =0; k <(N+1)/2; k++)//i为行,j为列,k为圈数
  8. {
  9. while(j<N-k)//控制圈数, 首先赋值第一圈(k=0)第一行,一共N列,减去圈数,即为列尾+1列
  10. {
  11. a[i][j]=data;//赋值
  12. j++;//往右边移动
  13. data++;
  14. }
  15. j--;//退回,while(1)循环后,j=N-k;因为j从0开始,所以一共有N-k-1列,所以要往回退一列,即j--
  16. i++;//转向,接着对第一圈(k=0)第N-1列赋值
  17. while(i<N-k)//同上,i最大值为N-k-1
  18. {
  19. a[i][j]=data;
  20. i++;
  21. data++;
  22. }
  23. i--;//退回
  24. j--;//转向
  25. while(j>k-1)//当k=0时,j最小为0;当k=1时,j最小为1;。。。所以j>k-1
  26. {
  27. a[i][j]=data;
  28. j--;
  29. data++;
  30. }
  31. j++;//退回
  32. i--;//转向
  33. while(i>k)//当k=0时,i最小为1;当k=1时,i最小为2;。。。所以i>k
  34. {
  35. a[i][j]=data;
  36. i--;
  37. data++;
  38. }
  39. i++;//退回
  40. j++;//转向
  41. }
  42. for(int i =0; i < N;++i)
  43. {
  44. for(int j =0; j < N;++j)
  45. {
  46. printf("%3d", a[i][j]);
  47. }
  48. printf("\n");
  49. }
  50. return0;
  51. }
 
技术分享
 
二、
/*****************************************************************************************
蛇形填数
时间限制:3000 ms  |  内存限制:65535 KB
  难度:3
描述
在n*n方阵里填入1,2,...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 1
6 9 2
5 4 3
*****************************************************************************************/
  1. #include<stdio.h>
  2. #define N 100
  3. int main()
  4. {
  5. int n,data=1;
  6. scanf("%d",&n);
  7. int a[N][N]={0};
  8. for(int i=0,j=n-1,k=0; k<(n+1)/2; k++)//K循环层数
  9. {
  10. while(i<n-k)
  11. {
  12. a[i][j]=data;
  13. i++;
  14. data++;
  15. }
  16. i--;
  17. j--;
  18. while(j>k-1)
  19. {
  20. a[i][j]=data;
  21. j--;
  22. data++;
  23. }
  24. j++;
  25. i--;
  26. while(i>k-1)
  27. {
  28. a[i][j]=data;
  29. i--;
  30. data++;
  31. }
  32. i++;
  33. j++;
  34. while(j<n-k-1)
  35. {
  36. a[i][j]=data;
  37. j++;
  38. data++;
  39. }
  40. j--;
  41. i++;
  42. }
  43. for(int i =0; i < n;++i)
  44. {
  45. for(int j =0; j < n;++j)
  46. {
  47. printf("%3d ", a[i][j]);
  48. }
  49. printf("\n");
  50. }
  51.     return 0;
  52. }
技术分享
技术分享
技术分享
技术分享





蛇形填数

原文:http://www.cnblogs.com/moon-future/p/4903104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!