c++ - 数组的旋转
问题描述
这是一个 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;
}
解决方案
您的代码存在问题,
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;
}
推荐阅读
- reactjs - 使用 Redux 基于按钮单击添加/删除数组中的对象
- ffmpeg - 无效的流说明符:元数据
- python - Tkinter:为什么下一个“标签”的 0 列会有所不同?
- ios - UICollectionViewCompositionalLayout - 具有fractionalWidth 宽度和自定尺寸单元格的意外布局
- python - github get_organization 给出 Not Found Error github.GithubException.UnknownObjectException: 404
- visual-studio-code - 使用 haxe 在 Visual Studio Code 中运行和调试问题
- python - 如何在@tf.function 修饰函数中使用张量作为切片索引?
- python - 我可以找出我的注册表中的错误在哪里吗?
- git - 如何从多个 git 组织中提取存储库
- latex - 如何删除 LaTex 中图形的自动编号?