zoukankan      html  css  js  c++  java
  • 上三角

    Problem Description

    方阵的主对角线之上称为“上三角”。
    请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。

    Input

    程序运行时,从标准输入获得整数n(3~20)

    Output

    程序输出:方阵的上三角部分。
    要求格式:每个数据宽度为4,右对齐。

    Sample Input

    3
    4
    5
    

    Sample Output

       1   2   3
       6   4
       5
       1   2   3   4
       9  10   5
       8   6
       7
       1   2   3   4   5
      12  13  14   6 
      11  15   7
      10   8
       9



    这题和蛇形数组差不多,少了一个方向。就是用双重循环,里面用while判断三个方向,让它按照顺序来走标记是否走过了,并且确定当走完一个方向后走到下一步,因为只有这样才能进去下一个循环


    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int n,a[35][35],i,j,sum;
    	while(scanf("%d",&n)!=EOF)
    	{
    		int k=1;
    		memset(a,0,sizeof(a));
    		if(n%2==0)
    			sum=n/2*(n+1);
    		else
    			sum=(n+1)/2+n/2*(n+1);
    		//printf("%d
    ",sum);
    		i=0;j=0;
    		while(k<=sum)
    		{
    			while(a[i][j]==0 && j<n)
    			{
    				a[i][j]=k;
    				k++;
    				j++;
    			}
    			i++;j--;
    			j--;
    			//printf("#%d %d
    ",i,j);
    			while(a[i][j]==0 && j>=0 && i<n)
    			{
    				a[i][j]=k;
    				k++;
    				i++;
    				j--; 
    			 } 
    			 i--;i--;j++;
    			 //printf("##%d %d
    ",i,j);
    			while(a[i][j]==0 && i>=0) 
    			{
    				a[i][j]=k;
    				k++;
    				i--;
    			}           
    			j++;i++;
    			//printf("###%d %d
    ",i,j);
    		}
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<n-i;j++)
    				printf("%4d",a[i][j]);
    			printf("
    ");
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    Android开发环境配置
    Spring API后端原理及最佳实践
    Hibernate 编程
    MySQL 远程访问
    MySQL 5.7 8.0 重置密码
    H5 流媒体
    你不知道的项目
    Promise
    Why Vuex
    Vue 技术细节
  • 原文地址:https://www.cnblogs.com/szj-lxl/p/6684521.html
Copyright © 2011-2022 走看看