zoukankan      html  css  js  c++  java
  • 循环移位

    对于渣渣来说,什么都是值得思考的。

    循环移位,

    有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。

    题目就是把n个数围成一个环,分别把数往后移k个位置。

    代码实现:for (i=0; i<n; i++)
            b[(i+k)%n] = a[i];

    当然解法不止一种,个人认为这种思维才是程序员的思维。(本人也在锻炼中。。

    上题目:

    循环移动(指针专题)

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 258  解决: 145
    [提交][状态]

    题目描述

    有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
    题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
    另外要求定义并使用函数ringShift()
    void ringShift(int *a, int n, int k)
    {
    //循环移动后的数值仍然存入数组a中
    }

    输入

    输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。

    输出

    输出n个整数,由空格隔开。输出占一行。

    样例输入

    6
    1 2 3 4 5 6
    2

    样例输出

    5 6 1 2 3 4





    AC代码
     1 #include<stdio.h>
     2 #include <stdlib.h>
     3 
     4 void ringShift(int *a, int n, int k);
     5 
     6 int main()
     7 {
     8 int i, k, n;
     9 
    10 scanf("%d", &n);
    11     int *a = (int *) malloc (n * sizeof(int));
    12 
    13 for(i = 0; i < n; i++)
    14 scanf("%d", &a[i]);
    15 
    16 scanf("%d", &k);
    17 
    18 ringShift(a, n, k);
    19 
    20 return 0;
    21 }
    22 
    23 void ringShift(int *a, int n, int k)
    24 {
    25 int i;
    26 int *b = (int *) malloc (n * sizeof(int));
    27 
    28 for (i=0; i<n; i++)
    29 b[(i+k)%n] = a[i];
    30 for (i=0; i<n-1; i++)
    31 printf ("%d ", b[i]);
    32 printf ("%d
    ", b[i]);
    33 }
    34  
    让未来到来 让过去过去
  • 相关阅读:
    rest framework 之前
    python之psutil
    可持久化并查集总结
    复数学习
    主席树总结
    点分治题单(来自XZY)
    Tarjan&2-SAT 总结
    AC自动机题单
    网络流题目详讲+题单(入门版)(持续更新中......)
    网络流题目详讲+题单(提高版)(持续更新中......)
  • 原文地址:https://www.cnblogs.com/Tinamei/p/4380936.html
Copyright © 2011-2022 走看看