1 条题解

  • 0
    @ 2024-12-24 9:54:30

    C :

    #include<stdio.h>
    #include<string.h>
    int main( int argc, char **argv )
    {
        int n;
        while( scanf( "%d", &n ) != EOF )
        {
            int array[n + 1][n + 1];
            memset( array, 0, sizeof( array ) );
            int count = 1;
            int i = 0, j = 0, k = 1;
            array[i][j] = 1;
            printf( "%d", array[i][j] );
            while( count < ( ( 1 + n ) * n / 2 ) )
            {
                while( i + 1 < n && !array[i + 1][j] )
                    array[++i][j] = ++count;
                while( j + 1 < n && !array[i][j + 1] )
                    array[i][++j] = ++count;
                while( i - 1 >= 0 && j - 1>= 0 && !array[i - 1][j - 1] )
                    array[--i][--j] = ++count;
            }
            int u, v, ans = 1;
            for( u = 1; u < n; ++u )
            {
                for( v = 0; v <= u; ++v )
                    printf( " %d", array[u][v] );
            }
            printf( "\n" );
        }
        return 0;
    
    }
    

    C++ :

    #include<iostream>
    using namespace std;
    #include<fstream>
    #include<cstring>
    #include<cstdlib>
    #include<ctime>
    const int maxN = 24;
    int tri[maxN][maxN];
    int main()
    {
    	int N, value, row, col, dir, i, j;
    	while (cin >> N)
    	{
    		memset(tri, 0, sizeof(tri));
    		row = col = 1;
    		for (value = 1; value <= N; ++value)
    			tri[row++][col] = value;
    		row = N, col = 2;
    		for (value = N + 1; value <= 2 * N - 1; ++value)
    			tri[row][col++] = value;
    		row = N - 1, col = N - 1;
    		for (value = 2 * N; value <= 3 * N - 3; ++value)
    			tri[row--][col--] = value;
    		row = 2, col = 2;
    		value = 3 * N - 2;
    		dir = 1;
    		while (value <= N*(N + 1) / 2)
    		{
    			if (1 == dir)/*down one line*/
    			{
    				if ((0 == tri[row + 1][col]))
    					tri[++row][col] = value;
    				else
    				{
    					dir = 2;
    					tri[row][++col] = value;
    				}
    			}
    			else if (2 == dir)/*right one line*/
    			{
    				if ((0 == tri[row][col + 1]))
    					tri[row][++col] = value;
    				else
    				{
    					dir = 3;
    					tri[--row][--col] = value;
    				}
    			}
    			else
    			{
    				if ((0 == tri[row - 1][col - 1]))
    					tri[--row][--col] = value;
    				else
    				{
    					dir = 1;
    					tri[++row][col] = value;
    				}
    			}
    			++value;
    		}
    		for (row = 1; row <= N; ++row)
    		{
    			for (col = 1; col <= row; ++col)
    			{
    				cout << tri[row][col];
    				if (!(row == N&&col == row))
    					cout << " ";
    			}
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
    

    Java :

    
    import java.util.Scanner;
    
    class data {
    	int dig;
    	public data(int a) {
    		dig = a;
    	}
    }
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		while (in.hasNext()) {
    			int n = in.nextInt();
    			method(n);
    		}
    	}
    
    	private static void method(int n) {
    		// TODO Auto-generated method stub
    		int sum = n * (n + 1) / 2;
    		data[][] arr = new data[n][n];
    		int count = 1;
    		for (int i = 0; i < arr.length; i++) {
    			arr[i][0] = new data(count);
    			count++;
    		}
    		for (int i = 1; i < arr[0].length; i++) {
    			arr[n - 1][i] = new data(count);
    			count++;
    		}
    		int L = arr[0].length - 1;
    		int H = arr.length - 1;
    		While: while (count <= sum) {
    			// 1.向左上循环
    			for (; arr[--H][--L] == null;) {
    				arr[H][L] = new data(count);
    				count++;
    				if (count > sum)
    					break While;
    			}
    			L++;
    			H++;
    			// 2.单向下循环
    			for (; arr[++H][L] == null;) {
    				arr[H][L] = new data(count);
    				count++;
    				if (count > sum)
    					break While;
    			}
    			H--;
    			// 3.单向右循环
    			for (; arr[H][++L] == null;) {
    				arr[H][L] = new data(count);
    				count++;
    				if (count > sum)
    					break While;
    			}
    			L--;
    
    		}
    		// 遍历;
    		for (int i = 0; i < arr.length; i++) {
    			for (int k = 0; k < arr[0].length; k++) {
    				if (arr[i][k] != null){
    					if(i==arr.length-1&&k==arr[0].length-1)
    						System.out.println(arr[i][k].dig);
    					else
    						System.out.print(arr[i][k].dig + " ");
    				}
    					
    				
    			}
    		}
    		
    
    	}
    }
    
    
    • 1

    信息

    ID
    1168
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者