c++实现以下题目:在华小科的扑克牌中,花色和点数分别由一个整数指定,而同花顺,就是指一些扑 克牌,它们花色相同,并且点数连续。 现在华小科手里有 n 张扑克牌,但它们可能并不能凑成同花顺,所以她决定用能力 凑出同花顺! 华小科每发动一次能力能够把一张牌换成牌堆中的一张牌,牌堆非常巨大,可以认 为牌堆种任意花色的任意点数的牌都有无数张。 现在华小科想知道,她至少要发动多少次能力,才能让这 n 张牌凑成同花顺?
时间: 2023-10-27 21:04:32 浏览: 55
以下是c++的实现代码:
```c++
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n, ans = 1e9;
int a[N], b[N], c[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i ++ )
scanf("%d", &a[i]);
for (int i = 1; i <= n; i ++ )
{
int t = a[i];
for (int j = 0; j <= 4; j ++ )
{
b[i] = t - j;
int cnt = 0;
for (int k = 1; k <= n; k ++ )
c[k] = a[k];
sort(b + 1, b + n + 1);
for (int k = 1; k <= n; k ++ )
{
if (c[k] != b[k])
{
cnt ++ ;
c[k] = b[k];
}
}
int flag = 1;
for (int k = 1; k <= n - 1; k ++ )
{
if (c[k] + 1 != c[k + 1])
{
flag = 0;
break;
}
}
if (flag) ans = min(ans, cnt);
}
}
if (ans == 1e9) puts("-1");
else printf("%d\n", ans);
return 0;
}
```
思路说明:
我们可以枚举同花顺的最小值,然后按照从大到小的顺序依次枚举同花顺中的每个牌,即可以得到当前同花顺的方案。最后再统计一下需要几次能力,即可求出最小值。
具体实现时,我们可以先将牌堆中的牌从大到小排序,然后枚举同花顺的最小值,用一个计数器cnt记录当前用了几次能力,用一个数组c记录当前手中的牌,如果遇到c[i]不等于b[i],说明需要用一次能力替换牌c[i]。最后判断c数组是否满足同花顺的条件,如果满足,更新答案即可。
需要注意的点:
1.如果无法组成同花顺,则输出-1。
2.同花顺的最小值可能为负数,因此需要枚举5个数。
3.数组b、c和牌堆中的牌均需要从大到小排序。
时间复杂度为O(n^2logn)。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)