10 条题解

  • 3
    @ 2023-5-5 19:54:09

    按题意模拟。再建造一个二维数组 bb,用于存操作完的 aa 数组。操作完后进入 print() 函数,输出 bb 数组,再将 aa 数组更新。

    操作:

    • 平移:11操作时,bb从第一行开始存aa从第二行开始的数,最后补上未存的数。2,3,42,3,4操作类似。
    • 旋转:观察样例:
      1 2 3
      4 5 6
      7 8 9
      
      转完后:
      7 4 1
      8 5 2
      9 6 3
      
      可以发现,只是bb存的时候先存列,再将行倒过来 其余同理。

    \color{blue} 代 \color{green} 码:

    #include <bits/stdc++.h> 
    using namespace std;
    
    int n,q,a[101][101],num,b[101][101];
    
    void print()//输出并且更新a
    {
    	for(int i = 1;i <= n;i++)
    	{
    		for(int j = 1;j <= n;j++)
    		{
    			a[i][j] = b[i][j];
    			printf("%d ",a[i][j]);
    		}
    		printf("\n");
    	}
    	printf("\n");
    	return;
    }
    
    signed main()
    {
    	scanf("%d%d",&n,&q);
    	for(int i = 1;i <= n;i++)
    	{
    		for(int j = 1;j <= n;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	for(int x = 1;x <= q;x++)
    	{
    		scanf("%d",&num);
    		if(num == 1)
    		{
    			for(int i = 2,o = 1;i <= n;i++,o++)//b从第一行开始存a从第二行开始的数
    			{
    				for(int j = 1;j <= n;j++)
    				{
    					b[o][j] = a[i][j];
    				}
    			}
    			for(int i = 1;i <= n;i++) b[n][i] = a[1][i];//补上未赋值的
    			print();//输出
    		}
    		else if(num == 2)//同上
    		{
    			for(int i = 2,o = 1;i <= n;i++,o++)
    			{
    				for(int j = 1;j <= n;j++)
    				{
    					b[i][j] = a[o][j];
    				}
    			}
    			for(int i = 1;i <= n;i++) b[1][i] = a[n][i];
    			print();
    		}
    		else if(num == 3)//同上
    		{
    			for(int i = 1;i <= n;i++)
    			{
    				for(int j = 2,o = 1;j <= n;j++,o++)
    				{
    					b[i][o] = a[i][j];
    				}
    			}
    			for(int i = 1;i <= n;i++) b[i][n] = a[i][1];
    			print();
    		}
    		else if(num == 4)//同上
    		{
    			for(int i = 1;i <= n;i++)
    			{
    				for(int j = 2,o = 1;j <= n;j++,o++)
    				{
    					b[i][j] = a[i][o];
    				}
    			}
    			for(int i = 1;i <= n;i++) b[i][1] = a[i][n];
    			print();
    		}
    		else if(num == 5)
    		{
    			for(int j = 1;j <= n;j++)
    			{
    				for(int i = 1,o = n;i <= n;i++,o--)
    				{
    					b[j][i] = a[o][j];
    				}
    			}
    			print();
    		}
    		else if(num == 6)
    		{
    			for(int i = n,o = 1;i >= 1;i--,o++)
    			{
    				for(int j = n,t = 1;j >= 1;j--,t++)
    				{
    					b[o][t] = a[i][j];
    				}
    			}
    			print();
    		}
    		else if(num == 7)
    		{
    			for(int j = n,o = 1;j >= 1;j--,o++)
    			{
    				for(int i = 1;i <= n;i++)
    				{
    					b[o][i] = a[i][j];
    				}
    			}
    			print();
    		}
    	}
    	return 0;
    }
    

    因本人很赖所以没有写出所有情况的解释

    信息

    ID
    2956
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    649
    已通过
    166
    上传者