PAT1008数组元素循环右移问题(2,3测试点不过的解决办法)

简介: PAT1008数组元素循环右移问题(2,3测试点不过的解决办法)

PATB 1008

本篇描述三种解题代码供读者参考

第一种:使用大数组,控制输出,用截断的方法

不要犯笔者的错误,笔者一开始理解错了题意,想成了左移,已注释,也粘贴了上来

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int A[1000000000];
//下为左移
/*int main(int argc, char **argv){
        int step = 0, count = 0;
        scanf("%d %d",&count,&step);
        for(int i = 0; i < count; i++){
                scanf("%d",&A[i]);
        }
        int len = count + step;
        for(int i = 0; i < step; i++){
                A[count+i] = A[i];
        }
        for(int i = step; i < len; i++){
                printf("%d",A[i]);
                if(i!=len-1){
                        printf(" ");
                }
        }
}*/
int main(int argc, char **argv){
        int count = 0, step = 0;
        scanf("%d %d",&count,&step);
        step = step % count;//过2,3数据点的关键
        for(int i = 0; i < count; i++){
                scanf("%d",&A[i + step]);
        }
        for(int i = 0; i < step; i++){
                A[i] = A[count+i];
        }
        for(int i = 0; i < count; i++){
                printf("%d",A[i]);
                if(i!=count-1){
                        printf(" ");
                }
        }
}

注意笔者,一开始没有添加注释中所写的关键步骤,导致2,3数据点一直不过,下同,加上即可

第二种,矩阵转置的思路,(B,A)=(A^-1, B^-1 )^-1

#include <bits/stdc++.h>
using namespace std;
void reverse(int R[], int left, int right);
int main(int argc, char **argv){
        int m, n;
        scanf("%d %d", &n, &m);
        int arr[n];
        for(int i = 0; i < n; i++){
                scanf("%d",&arr[i]);
        }
        m = m % n;
        reverse(arr, 0, n-m-1);
        reverse(arr, n-m, n-1);
        reverse(arr, 0, n-1);
        for(int i = 0; i < n-1; i++){
                printf("%d ",arr[i]);
        }
        printf("%d",arr[n-1]);
        return 0;
}
void reverse(int R[], int left, int right){
        int i = left, j = right, temp;
        while(i < j){
                temp = R[i];
                R[i] = R[j];
                R[j] = temp;
                i++;
                j--;
        }
}

第三种,其他网友参考答案,与笔者的第一种方法相反,控制输入,这种方法更巧妙一些

#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
//在输入上下手,高招
int main(int argc, char **argv){
        int m, n;
        scanf("%d %d",&n,&m);
        m = m % n;
        int a[n];
        for(int i = m; i <= n-1; i++){
                scanf("%d ",&a[i]);
        }
        for(int i = 0; i<=m-1; i++){
                scanf("%d",&a[i]);
        }
        for(int i = 0; i <n-1; i++)
                printf("%d ",a[i]);
        printf("%d",a[n-1]);
        return 0;
}


相关文章
|
7月前
|
Perl
在awk中,初始化-测试-递增型的 `for` 循环
在awk中,初始化-测试-递增型的 `for` 循环
57 2
|
7月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
95 0
|
算法 测试技术 C#
C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例
C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例
|
4月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
本文介绍了Python中的循环语句,包括while和for循环的使用,range()函数的运用,以及continue、break和pass关键字的说明,同时提出了关于while循环是否能与成员运算符结合使用的思考。
56 1
Python接口自动化测试框架(基础篇)-- 流程控制之循环语句for&while
|
3月前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。
|
6月前
|
编译器 测试技术 Linux
技术洞察:循环语句细微差异下的性能探索(测试while(u--);和while(u)u--;的区别)
该文探讨了两种循环语句(`while(u--);` vs. `while(u) u--;`)在性能上的微妙差异。通过实验发现,后者比前者平均执行速度快约20%,原因在于循环条件检查的顺序影响了指令数量。尽管差异可能在多数情况下不显著,但在性能关键的代码中,选择合适的循环结构能优化执行效率。建议开发者在编写循环时考虑编译器优化和效率。未来研究可扩展到不同编译器、优化级别及硬件架构的影响。
|
7月前
|
存储 弹性计算 运维
循环测试用户名与密码是否正确
【4月更文挑战第29天】
38 0
|
7月前
|
弹性计算 运维 Shell
测试开关机(while循环)
【4月更文挑战第29天】
47 0
|
7月前
|
弹性计算 运维 Shell
测试开关机(for循环)
【4月更文挑战第29天】
34 0
|
7月前
|
存储 弹性计算 运维
循环测试用户名与密码是否正确
【4月更文挑战第29天】
38 0
下一篇
DataWorks