8 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
        @ 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;
          }
          • -1
            @ 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
                4
                Tags
                (None)
                # Submissions
                89
                Accepted
                30
                Uploaded By