为我提供了n
个元素的数组,并给出了一个整数K
。我必须以相反的顺序打印K
元素的子数组。
我将元素存储在向量中并增加了计数。一旦计数等于K
,就以相反的顺序打印向量并清除向量的所有元素。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t; // No of test cases
cin >> t;
while (t--)
{
// Size of array and The size of each group
int n, k;
cin >> n >> k;
int arr[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
vector <int> my_nums;
int count = 0;
for (int i = 0; i < n; i++)
{
my_nums.push_back(arr[i]);
count++;
if (count == k)
{
for (auto it = my_nums.rbegin(); it != my_nums.rend(); ++it)
{
cout << *it << " ";
}
//Clear all elements in vector
my_nums.clear();
}
}
cout << endl;
}
return 0;
}
ex:
I/P:
1
8 3
1 2 3 4 5 6 7 8
Expected O/P:
3 2 1 6 5 4 8 7
Actual O/P:
3 2 1
答案 0 :(得分:3)
您还需要重置count
。除此之外,my_nums
向量应在打印其中的元素后清除。
count++;
if (count == k)
{
for (auto it = my_nums.rbegin(); it != my_nums.rend(); ++it)
{
cout << *it << " ";
}
my_nums.clear(); // moved to here
count = 0; // --> reset here
}
但是当count < k
却是i >= n
时会发生什么?这意味着如果my_nums
不为空,则需要在for循环之后再次打印my_nums
,以获得完整的结果。
for (int i = 0; i < n; i++)
{
// above code
}
if (!my_nums.empty())
{
for (auto it = my_nums.rbegin(); it != my_nums.rend(); ++it)
{
cout << *it << " ";
}
}
另外,请注意以下内容:
答案 1 :(得分:0)
尝试在外循环的末尾设置“ count = 0”。