9 solutions

  • 9
    @ 2024-5-12 10:30:44
    /*
    观察每个对角线的起点和每次填写的次数,
    根据当前需要填写的行数的奇偶去判断是从左下到右上,还是右上到左下 
    
    */
    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    int g[N][N];
    int main()
    {
    	int n;
    	cin>>n;
    	int cnt=1;
    	for(int i=1;i<=n;i++) //填写第i列的起点 
    	{
    		if(i%2==0) //偶数行左上到右下 
    		{
    			for(int x=1,y=i;x<=i;x++,y--) //从(1,i) 
    			{
    				g[x][y]=cnt++;
    			}
    		}
    		else //奇数行左下到右上 
    		{
    			for(int x=i,y=1;y<=i;x--,y++) //从(i,1) 
    			{
    				g[x][y]=cnt++;
    			}
    		}
    		
    	}
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=n-i+1;j++)
    		{
    			cout<<g[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
    • 5
      @ 2024-7-6 11:08:40
      #include<bits/stdc++.h>
      using namespace std;
      const int N=25;
      int dx[]={-1,0,1,1};//行下左上右
      int dy[]={1,1,-1,0};//列下左上右
      int a[N][N];
      int main()
      {
          int n;
          cin>>n;
          int d=0;
          int x=1,y=1;
          for(int i=1;i<=n*(n+1)/2;i++)
          {
              a[x][y]=i;
              int tx=x+dx[d],ty=y+dy[d];
              //(tx,ty)是由(x,y)通过d方向可以走到的点 
              if(tx<1||ty<1) 
              //越界,或者(tx,ty)已经有数 
              {
                  d++; //换个方向 
                  if(d==4) d=0; //方向走完以后从下开始 
                  tx=x+dx[d],ty=y+dy[d]; 
                  d++;
                  if(d==4) d=0; //方向走完以后从下开始 
                  //由新的方向可以走到的位置 
              }
              x=tx,y=ty;
          }   
          for(int i=1;i<=n;i++)
          {
              for(int j=1;j<=n-i+1;j++)
              {
                  cout<<a[i][j]<<" ";
              }
              cout<<endl; 
          }
          return 0;
      }
      
      • 0
        @ 2026-8-14 19:18:42

        死磕

        #include<bits/stdc++.h>
        using namespace std;
        int n;
        int a[15][15];
        int main()
        {
        	cin>>n;
        	int t=1,x=1,y=1;
        	a[1][1]=1;
        	for(int i=1;i<=n;i++){
        		t++;
        		if(i%2==0) x++;
        		if(i%2==1) y++;
        		a[x][y]=t;
        		for(int j=1;j<=i;j++){
        			if(i%2==1){
        				x++;y--;
        			}
        			else{
        				x--;y++;
        			}
        			
        			t++;a[x][y]=t;
        		}
        	}
        	for(int i=1;i<=n;i++){
        		for(int j=1;j<=n-i+1;j++){
        			cout<<a[i][j]<<" ";
        		}
        		cout<<endl;
        	}
        	return 0;
        }
        
        • 0
          @ 2025-9-7 14:38:30
          #include<bits/stdc++.h>
          using namespace std;
          int g[21][21];
          int main(){
          	int n;
          	cin>>n;
          	int cnt=1;
          	for(int i=1;i<=n;i++){
          		if(i%2==0){
          			for(int x=1,y=i;x<=i;x++,y--){
          				g[x][y]=cnt++;
          			}
          		}else{
          			for(int x=i,y=1;y<=i;x--,y++){
          				g[x][y]=cnt++;
          			}
          		}
          	}
          	for(int i=1;i<=n;i++){
          		for(int j=1;j<=n-i+1;j++){
          			cout<<g[i][j]<<' ';
          		}
          		cout<<endl;
          	}
          	return 0;
          }
          
          
          • 0
            @ 2025-3-17 20:21:27
            /*
            观察每个对角线的起点和每次填写的次数,
            根据当前需要填写的行数的奇偶去判断是从左下到右上,还是右上到左下 
            
            */
            #include<bits/stdc++.h>
            using namespace std;
            const int N=20;
            int g[N][N];
            int main()
            {
            	int n;
            	cin>>n;
            	int cnt=1;
            	for(int i=1;i<=n;i++) //填写第i列的起点 
            	{
            		if(i%2==0) //偶数行左上到右下 
            		{
            			for(int x=1,y=i;x<=i;x++,y--) //从(1,i) 
            			{
            				g[x][y]=cnt++;
            			}
            		}
            		else //奇数行左下到右上 
            		{
            			for(int x=i,y=1;y<=i;x--,y++) //从(i,1) 
            			{
            				g[x][y]=cnt++;
            			}
            		}
            		
            	}
            	for(int i=1;i<=n;i++)
            	{
            		for(int j=1;j<=n-i+1;j++)
            		{
            			cout<<g[i][j]<<" ";
            		}
            		cout<<endl;
            	}
            	return 0;
            }
            • -2
              @ 2025-3-17 20:20:44
              5
                asklgh
              
                rqc
                gwg
                e 
                e 
                gwre
                 wre w
            • -2
              @ 2024-12-6 13:29:11
              #include<bits/stdc++.h>
              using namespace std;
              const int N=20;
              int g[20][20];
              int main()
              {
              	int n;
              	cin>>n;
              	int cnt=1;
              	for(int i=1;i<=n;i++) //填写第i列的起点 
              	{
              		for(int x=1,y=i;x<=i;x++,y--) //从(1,i) 
              		{
              			g[x][y]=cnt++;
              		}
              	}
              	for(int i=1;i<=n;i++)
              	{
              		for(int j=1;j<=n-i+1;j++)
              		{
                          if(g[i][j] !=0)
              				cout<<g[i][j]<<" ";
              		}
              		cout<<endl;
              	}
              	return 0;
              }
              
              
              • -4
                @ 2024-10-26 11:22:10

                asasass

                • -4
                  @ 2024-6-12 20:20:54
                  #include<bits/stdc++.h>
                  using namespace std;
                  const int N=11;
                  int n[N][N];
                  int main(){
                  	int qwert;
                  	cin>>qwert;
                  	int asdf=1;
                  	for(int i=1;i<=qwert;i++)
                  	{
                  		int l=i;
                  		int p=1;
                  		while(l>=1)
                  		{
                  			if(i%2==0)
                  			{
                  				n[p][l]=asdf;
                  			}
                  			else
                  			{
                  				n[l][p]=asdf;
                  			}
                  			asdf++;
                  			p++;
                  			l--;			
                  		}
                  	}
                  	for(int q=1;q<=qwert;q++)
                  	{
                  		for(int d=1;d<=qwert;d++)
                  		{
                  			if(n[q][d]==0)
                  			{
                  				continue;
                  			}
                  			cout<<n[q][d]<<" ";
                  		}
                  		cout<<endl;
                  	}
                  	return 0;
                  }
                  
                  
                  • 1

                  Information

                  ID
                  82
                  Time
                  1000ms
                  Memory
                  256MiB
                  Difficulty
                  3
                  Tags
                  (None)
                  # Submissions
                  93
                  Accepted
                  33
                  Uploaded By