Codeforces Round #686 (Div. 3)_A. Special Permutation

博客围绕特殊排列问题展开,给出题目链接和题面示例。题意是1~n的序列需满足a[i]!=i,解题思路是倒着放,若n为奇数则将中间的a[n/2+1]与首位调换顺序,还给出了相关代码。

A. Special Permutation

题目链接在此!

题面:
在这里插入图片描述
Example
inputCopy
2
2
5
outputCopy
2 1
2 1 5 3 4

题意分析:

1~n的序列,要求a[i]!=i即可。
思路:倒着放,如果n是奇数就把中间那个a[n/2+1]与首位调换顺序。达到目的。

代码块:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int T;
    cin>>T;
    while(T--){
      int n;
      int a[1001];
      cin>>n;
      if(n%2==0){
        for(int i=1;i<=n;i++){
            a[i]=i;
        }
      cout<<a[n];
      for(int i=n-1;i>=1;i--){
          cout<<" "<<a[i];
      }
      cout<<endl;
    }
      else{
          for(int i=1;i<=n;i++){
              a[i]=i;
          }
          int temp;
          temp=a[1];
          a[1]=a[n/2+1];
          a[n/2+1]=temp;
          cout<<a[n];
          for(int i=n-1;i>=1;i--){
              cout<<" "<<a[i];
          }
          cout<<endl;
      }
    }
}

感觉写繁琐了,不过无所谓啦。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值