我正在编写一个程序,将此代码中的数组移动两个,例如,a [5] = {0,1,2,3,4}并输出{3,4,0 ,1,2}我已经编写了代码,但是我错过了一些东西......感谢任何帮助!
#include <iostream>
using namespace std;
void circularShift(int a[], int size)
{
for (int i = size-2; i >=0; i--)
{
int temp = a[i+1];
a[i+1] = a[i];
}
}
int main()
{
int a[5] = {0,1,2,3,4};
int size = 5;
circularShift(a, 5);
for (int i=0; i < size; i++)
{
cout << a[i]<< " ";
}
return 0;
}
答案 0 :(得分:0)
试试这个 -
void circularShift(int a[], int size)
{
int tmp = a[0];
for (int i = 0; i < size-1 ; i++)
{
a[i]=a[i+1];
}
a[size-1] = tmp;
}
答案 1 :(得分:0)
你的功能不对:
a[5]
如果您需要向右移动两次,则需要计算元素的新索引:
newIndex = (oldIndex+2)%5
它将确保您在阵列中进行循环移位。
答案 2 :(得分:0)
void circularShift(int a[], int size)
{
int tmp1 = a[size - 1];
int tmp2 = a[size - 2];
for (int i = size-3; i >=0; i--)
{
a[i+2] = a[i];
}
a[1] = tmp1;
a[0] = tmp2;
}
答案 3 :(得分:0)
虽然它是高度复杂的方法,但它仍然适用于您的问题。
#include <iostream>
using namespace std;
void circularShift(int a[], int size)
{
int no;
int rotate_no = 2;
for(int j=0; j<rotate_no; j++)
{
no = a[size-1];
for (int i=0 ; i<size ; i++)
{
int temp = a[i];
a[i] = no;
no = temp;
}
}
}
int main()
{
int a[5] = {0,1,2,3,4};
int size = 5;
circularShift(a, 5);
for (int i=0; i < size; i++)
{
cout << a[i]<< " ";
}
return 0;
}
答案 4 :(得分:0)
试试这个
void circularShift(int a[], int size, int rotations)
{
int temp = a[0];
for (int i = 0; i <size; i++)
{
int temp1 = a[((i+1)*rotations)%size];
a[((i+1)*rotations)%size] = temp;
temp = temp1;
}
}
答案 5 :(得分:0)
使用stl:https://ideone.com/Zd3hu4
void circularShift(int a[], int size)
{
assert(size >= 2);
std::rotate(a, a + size - 2, a + size);
}