首页 > 解决方案 > 数组的旋转

问题描述

这是一个 C++ 代码,我觉得它是正确的,但它不起作用。

我将解释一下以供理解

t- 尝试次数。
n- 数组的大小。
k- 旋转次数。

输入:1 2 3 4 5

对于k=2,输出:4 5 1 2 3

请提供相同的建议。

#include<iostream>

using namespace std;

int main() {
    int t,n,k;
    cin >> t;
    int s = 0;
    int a[1000];
    int b[1000];
    for (int i = 0; i < t; i++) {
        cin >> n;  //TAKING IN THE NUMBER OF ELEMENTS.
        cin >> k;  // TAKING IN AMOUNT OF ROTATION.
        for (int j = 0; j < n; j++) {
            cin >> a[j];  //READING ARRAY.
            cout << " ";
        }
        for (int y = 0; y < n; y++) {
            b[y + k] = a[y];  // REARRANGING ARRAY.
            if (y + k >= n) {
                b[s] = a[y];
                s++;
            }
            cout << b[y] << " "; // SHOWING ARRAY.
        }
    }
    return 0;
}

标签: c++

解决方案


您的代码存在问题,

cout<<b[y]<<" "; // SHOWING ARRAY.

你必须把它从那个 for 循环中取出,因为你试图打印一些你没有给出值的东西。例如,首先 y=0 你设置 b[y+2] 但你打印 b[y] 还没有放。

对于 t>1,您将看到的另一个问题是 s 的初始化是在 main 之外完成的,即它仅在第一次运行时为 0。

最终代码将是

#包括

using namespace std;
int main()
{

int t;
cin>>t;
int n;
int k;

int a[1000];
int b[1000];
for(int i=0;i<t;i++)
{
    int s=0; //Changed
    cin>>n;  
    cin>>k;  
for(int j=0;j<n;j++)
    {
  cin>>a[j]; 
 // cout<<" ";  //Not needed
    }
for(int y=0;y<n;y++)
 {
   b[y+k]=a[y];  
   if(y+k>=n)
   {
   b[s]=a[y];
   s++;
   }
//cout<<b[y]<<" "; // changed this
 }
 for(int y=0;y<n;y++)         //added this
 cout<<b[y]<<" ";
}
return 0;
}

推荐阅读