当前位置:网站首页>火星人 --简单的数学题
火星人 --简单的数学题
2022-08-09 07:57:00 【scwMason】
题目简单来说就是五根手指代表1 2 3 4 5,然后按照从小到大全排列,然后根据给出的第二个数据计算出整个全排列中第几大的数
那么我们首先要解决的是:从小到大全排列的顺序问题,这里我们可以用两种方法:
1.手写代码
2.STL函数
手写代码主要掌握下面的逻辑
1.首先从最尾端开始往前寻找两个相邻元素,令第一元素为*i,第二元素为*ii,且满足*i<*ii。
2.找到这样一组相邻元素后,再从最尾端开始往前检验,找出第一个大于*i的元素,令为*j,将i,j元素对调(swap)。
3.再将ii之后的所有元素颠倒(reverse)排序。
然后就可以写出代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int arr[10005],n,m;
void work()
{
int flag;
//寻找第一组arr[i]<arr[i+1]的组合
for(int i=n-2;i>=0;i--)
{
if(arr[i]<arr[i+1])
{
flag=i;
break;
}
}
//从后往前寻找到第一个大于arr[flag]的数,与arr[flag]交换
for(int i=n-1;i>=0;i--)
{
if(arr[i]>arr[flag])
{
int cur=arr[flag];
arr[flag]=arr[i];
arr[i]=cur;
break;
}
}
//将flag后面的所有数都反转
int left=flag+1,right=n-1;
while(left<=right)
{
int ds=arr[left];
arr[left]=arr[right];
arr[right]=ds;
left++;
right--;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
while(m--)
{
//next_permutation(arr,arr+n);
work();
}
for(int i=0;i<n-1;i++)
{
printf("%d ",arr[i]);
}
printf("%d",arr[n-1]);
return 0;
}
如果是用STL函数的话,就可以:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int arr[10005],n,m;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
while(m--)
{
next_permutation(arr,arr+n);
}
for(int i=0;i<n-1;i++)
{
printf("%d ",arr[i]);
}
printf("%d",arr[n-1]);
return 0;
}
原理是一样的
边栏推荐
- 解决pycharm每次新建项目都要重新pip安装一些第三方库等问题
- Web 3D渲染引擎HOOPS Communicator动画编辑器的使用 | HOOPS教程
- db2数据库备份恢复问题
- 静态路由的原理与配置
- C language: adjust the order of odd and even numbers
- .net(二) 配置数据库
- Shell--常用小工具(sort、uniq、tr、cut)
- C language: reverse character order
- MYSQLWorkbench看数据库ER图
- DIMP:Learning Discriminative Model Prediction for Tracking 学习判别模型预测的跟踪
猜你喜欢
随机推荐
C语言:打印菱形
The String class objects created by the JVM memory allocation and the difference between equals and = =
Pytorch中 nn.BatchNorm2d() 归一化操作
LeetCode:876. 链表的中间结点————简单
软件测试的岗位会越来越少吗?
ImportError: cannot import name ‘imresize‘
C language: detailed explanation of soda bottle
(二)、灰色预测模型(GM1,1)
转换为onnx模型错误汇总
主键id,Snowflake雪花算法,优点:生成有顺序的id,提高数据库的性能
[STL]list
PyTorch中 torch.nn与torch.nn.functional的区别
Use tensorflow.keras to build a neural network model modularly
.net(五) 业务层实现
SQL存储过程
Anaconda 更换默认虚拟环境
SA-Siam:用于实时目标跟踪的双重连体网络A Twofold Siamese Network for Real-Time Object Tracking
Kotlin协程 - 异常处理
One-click login server script
权限(上)