从 一位选手所射的箭中找出一段能产生所有的环数,这段所射箭的最短只数就是得 分。 8 现在,告诉你选手共射出 n 只箭的环数,那么最短的那段射出 1-m 环的只数 是多少? 输出就一个数,表示这位选手的得分。如果这位运动员无法在这 n 箭中射出所有的环 数,则输出-1。c++代码
时间: 2024-02-13 09:01:11 浏览: 159
以下是一个简单的 C++ 程序,可以解决这个问题:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> cnt(8);
for (int i = 0; i < n; i++) {
int x;
cin >> x;
if (x == 5 || x == 7) {
cout << -1 << endl;
return 0;
}
cnt[x]++;
}
if (cnt[1] == 0 || cnt[2] < cnt[1] || cnt[3] < cnt[1] || cnt[4] < cnt[1] || cnt[6] < cnt[1]) {
cout << -1 << endl;
return 0;
}
int ans = cnt[1] + cnt[2] + cnt[3] + cnt[4] + cnt[6];
cout << ans << endl;
return 0;
}
```
程序首先读取输入的整数 n,表示选手共射出 n 只箭的环数。然后,程序读取 n 个整数,表示每只箭的环数。程序使用一个数组 cnt 来计算每个环数出现的次数。如果出现了 5 或 7,那么选手无法在这 n 箭中射出所有的环数,程序输出 -1 并终止。否则,程序检查是否至少有一只箭射出了 1 环,以及是否有足够的箭射出了每个环数,从而能够组成所有的环数。如果有,程序计算得分并输出。如果没有,程序输出 -1。
注意:此代码仅供参考,可能存在一些潜在的错误或不足之处,需要根据实际情况进行修改和完善。
阅读全文