描述
前N个自然数排成一串:x1,x2,x3…Xn。先取出x1,将x2,x3移到数串尾,
再取出x4,将x5,x6移到数串尾,...类推直至取完,取出的序列恰好是:1,2,3...... N。要求输入N,求原来数串的排列方式。
输入格式
只有一个数为N(N≤100)。
输出格式
只有一行,为原来数串的排列方式。
样例输入
5
样例输出
1 5 3 2 4
c++:数串的排列。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- chenfycc 2021-06-24 17:16关注
int n,p=0,q,a[305]={},b[105]={}; cin>>n; q=n; for(int i=1;i<=n;i++) { a[i]=i; } for(int i=1;i<=n;i++) { b[i]=a[++p]; a[++q]=a[++p]; a[++q]=a[++p]; } for(int i=1;i<=n;i++) { a[b[i]]=i; } for(int i=1;i<=n;i++) { cout<<a[i]<<" "; }
解释一下
我这个思路清奇(主要因为开始没看清题)(反向推理一波)
首先模拟一遍,假设原序列为{1,2,3,...}
p标记队头的位置,q标记队尾的位置
b为输出序列
若输出应该是b_real{1,2,3,...},则b中的第n个元素k应该为n
那么a中的第k个元素(原本是k)应该改成n
操作完的a就是原来应该为的数列,输出就好
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
- ¥15 vscode程序一直报同样的错,如何解决?
- ¥15 关于使用unity中遇到的问题
- ¥15 开放世界如何写线性关卡的用例(类似原神)
- ¥15 关于并联谐振电磁感应加热
- ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
- ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
- ¥66 如何制作支付宝扫码跳转到发红包界面
- ¥15 pnpm 下载element-plus
- ¥15 解决编写PyDracula时遇到的问题