3 条题解

  • 1
    @ 2023-7-31 15:36:07

    这道题其实可以用一种很普通有趣的做法做,即:在这个数组的后面再接上这个序列,例如:如果输入1 2 3 4 5 6,那么我的目的是使我的数组内成为:1 2 3 4 5 6 1 2 3 4 5 6,这样的话,我只需要分别从1、2、3、4、5、6开始,输出其及其后共6个数,然后换行即可,下面是代码实现(建议大家对着代码自己模拟过程)

    #include<cstdio>
    using namespace std;
    int a[220];
    int m;
    int main()
    {
    	scanf("%d",&m);
    	for (int i=1;i<=m;i++)
    	{
    		scanf("%d",&a[i]);
    		a[i+m]=a[i];//在后面接一个同样的序列 
    	}
    	for (int i=1;i<=m;i++)
    	{
    		for (int j=i;j<=i+m-1;j++)
    		{
    			printf("%d ",a[j]);
    		}
    		printf("\n");
    	}
    	return 0;
    } 
    
    
    • 0
      @ 2024-8-14 23:16:59

      这道题可以将输入的数据以环形输出,每一行的起始点+1即可;可根据以下程序的注释理解

      #include<bits/stdc++.h>
      using namespace std;
      int a[101];
      
      int main()
      {
      	
      	int n,m,ans=0,i=1,j,ans1=0,ans2=0;
      	cin>>n;
      	for(i=1;i<=n;i++)
      		cin>>a[i];
      		a[0]=a[n];//在后文的求余时,结果为0(整除)即为最后一个
      	for(i=0;i<=n-1;i++)//每一行的偏移量从0到n-1(第一行原顺序输出)
      	{
      		for(j=1;j<=n;j++)
      		{
      			cout<<a[(i+j)%n]<<" ";//环形输出
      		}
      		cout<<endl;
      	}
      	
      	
      	
      }
      
      • -7
        @ 2024-9-8 17:02:24

        可以理解为输入一个一维数组并将其输出一次,然后先把数组第一个元素放到末尾后,每调整一次后输出新的数组,重复(m-1)次

        
        #include<iostream>
        using namespace std;
        int a[101];
        int main()
        {
        	int i,j,temp,m;
        	cin>>m;
        	for(i=1;i<=m;i++)  cin>>a[i];
            for(i=1;i<=m;i++)  cout<<a[i]<<" ";
            cout<<endl;
            for(j=2;j<=m;j++)
            {
                temp=a[1];
                for(i=2;i<=m;i++) a[i-1]=a[i];
                a[m]=temp;
        		for(i=1;i<=m;i++)  cout<<a[i]<<" ";
                cout<<endl;
        	}
        	return 0;
        }
        • 1

        信息

        ID
        370
        时间
        1000ms
        内存
        256MiB
        难度
        1
        标签
        递交数
        83
        已通过
        56
        上传者