2、编写一个程序,使用最小的空间代价耗费(即一个辅助单元空间)对使用数组存储的N个数右移K位完成以下功能(K〈N)。 1)N个int整数。 2)N个float浮点数 3)使用类模板封装该函数。
时间: 2023-06-12 09:05:20 浏览: 49
以下是使用数组存储的N个int整数右移K位的程序:
```c++
void right_shift(int arr[], int n, int k) {
k = k % n;
int temp[k];
for (int i = n - k; i < n; i++) {
temp[i - n + k] = arr[i];
}
for (int i = n - k - 1; i >= 0; i--) {
arr[i + k] = arr[i];
}
for (int i = 0; i < k; i++) {
arr[i] = temp[i];
}
}
```
以下是使用数组存储的N个float浮点数右移K位的程序:
```c++
void right_shift(float arr[], int n, int k) {
k = k % n;
float temp[k];
for (int i = n - k; i < n; i++) {
temp[i - n + k] = arr[i];
}
for (int i = n - k - 1; i >= 0; i--) {
arr[i + k] = arr[i];
}
for (int i = 0; i < k; i++) {
arr[i] = temp[i];
}
}
```
以下是使用类模板封装的程序:
```c++
template<typename T>
void right_shift(T arr[], int n, int k) {
k = k % n;
T temp[k];
for (int i = n - k; i < n; i++) {
temp[i - n + k] = arr[i];
}
for (int i = n - k - 1; i >= 0; i--) {
arr[i + k] = arr[i];
}
for (int i = 0; i < k; i++) {
arr[i] = temp[i];
}
}
```
使用示例:
```c++
int main() {
int arr1[] = {1, 2, 3, 4, 5};
right_shift(arr1, 5, 2);
for (int i = 0; i < 5; i++) {
cout << arr1[i] << " ";
}
cout << endl;
float arr2[] = {1.1, 2.2, 3.3, 4.4, 5.5};
right_shift(arr2, 5, 2);
for (int i = 0; i < 5; i++) {
cout << arr2[i] << " ";
}
cout << endl;
return 0;
}
```