题目描述
AC君有6张卡片,分别写着从1到6的整数。
最初,从左到右从1到6的卡片以递增的状态排列。
AC君会执行n次操作,第i次操作(i=0,1,2…n-1)将从左数第(i mod 5)+1张与第(i mod 5)+2张卡片的位置互换,其中mod表示取余操作。
下面是n=5时的操作演示
i=0时
i=1时
i=2时
i=3时
i=4时
最终n=5可以得到234561的卡片顺序。
请你帮助AC君编程求出最终卡片的状态
样例
输入:5
输出:234561
2.
输入:100000000
输出:345612
思路
这道题乍一看很简单,只需要知道swap函数即可,即:
swap(a[i%5+1],a[i%5+2]);
但是经过第二个样例的测试,程序超时了,这是因为大量数据进行遍历导致时间溢出。这时,我们需要找规律,多试几遍就知道了,数据输出以30为一组,所以输入一个n,只需要将n%30就可以了
最终代码
#include<bits/stdc++.h>
using namespace std;
//本代码版权归csdn博主小D爱编程所有,转载请标明
int main(){
long long n;
int a[7]={0,1,2,3,4,5,6};
cin>>n;
n%=30;//避免超时
for(int i=0;i<n;i++){
swap(a[i%5+1],a[i%5+2]);
// int tmp=0;
// tmp=a[i%5+1];
// a[i%5+1]=a[i%5+2];
// a[i%5+2]=tmp;
}
for(int i=1;i<=6;i++) cout<<a[i];
return 0;
}
鸣谢:乔斯编程的wangzhanxiong老师为我们提供了题源