zoukankan      html  css  js  c++  java
  • PTA 乙级 1008 数组元素循环右移问题 (20分) C、C++

     用C语言写的,逐个移动每一位的位置实现右移

    C语言

     1 #include<stdio.h>
     2 
     3 void swap(int* n, int count,int num) {
     4     int tmp = 0;
     5     int i = 0;
     6     int j = count - 2;
     7     for (i = 0; i < num; i++) {        //循环次数由右移位数决定    
     8         tmp = n[count - 1];            //储存最后一位,使最后一位前移 
     9         for (j = count - 2; j >= 0; j--) {
    10             n[j + 1] = n[j];
    11         }
    12         n[0] = tmp;
    13     }
    14 }
    15 
    16 int main() {
    17     int n[100];
    18     int i = 0;
    19     int count = 0, num = 0;
    20     scanf("%d %d",&count,&num);
    21     for (i = 0; i < count; i++) {
    22         scanf("%d",&n[i]);
    23     }
    24     num = num % count;        //避免重复循环
    25      
    26     swap(n, count, num);
    27     
    28     printf("%d",n[0]);
    29     for (i = 1; i < count; i++) {
    30         printf(" %d",n[i]);
    31     }
    32     return 0;
    33 }

     还挺快的

    C++ algorithm

    还有一种方法,利用C++ algorithm完成,具体思路是这样的:

    先将输入得到的数组倒序

    由于需要将每个整数循环向右移M个位置,则将倒序后的数组从第M项分割开,

    分别进行倒序,则可得到右移后的数组

     利用algorithm里的reverse函数实现倒序

     C++

     代码如下:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 
     5 using namespace std;
     6 
     7 int main() {
     8     int n = 0, c = 0;
     9     cin >> n >> c;
    10     vector<int> arr(n);
    11     for (int i = 0; i < n; ++i) {
    12         cin >> arr[i];
    13     }
    14     c = c % n;            //避免重复循环
    15 
    16     reverse(arr.begin(), arr.end());    //开始倒序
    17     reverse(arr.begin(), arr.begin() + c);
    18     reverse(arr.begin() + c, arr.end());
    19 
    20     cout << arr[0];
    21     for (int i = 1; i < arr.size(); i++) {
    22         cout << " " << arr[i];
    23     }
    24     return 0;
    25 }

     只能说,调库是个好东西

  • 相关阅读:
    HDU 5698 瞬间移动
    HDU 5695 Gym Class
    HDU 5694 BD String
    HDU 5692 Snacks
    HDU 5691 Sitting in Line
    胜利大逃亡
    BFS(广度优先搜索)
    计算直线的交点数
    Division
    Jesse's Code
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13193679.html
Copyright © 2011-2022 走看看