题目描述
一次摇六个筛子, 每粒筛子都不会与其之前出现过的点数重复, 可以人为的控制筛子的点数.
问: 给出一组初始的点数, 在n次投掷后的最大点数.(每次投掷都应使点数和最大).
思路
考虑无初始值的情况, 那么六次筛子投出的点数情况应该为:
6 6 6 6 6 6
5 5 5 5 5 5
4 4 4 4 4 4
3 3 3 3 3 3
2 2 2 2 2 2
1 1 1 1 1 1
由此可得, 初始值的作用是在6->1的过程中'跳过'某一个数字, 只有当投掷次数达到该点数时, 才会被'跳过'.
若按照正常顺序, n次投掷后的数字应该为7 - n, 当出现'跳过'时, 数字为 7 - n - 1
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int a[N], n;
int main(){
for(int i = 1; i <= 6; i++) cin >> a[i];
cin >> n;
for(int i = 1; i <= 6; i++){
if(7 - n <= a[i]) cout << 7 - n - 1; // 跳过一个数字
else cout << 7 - n;
cout << (i == 6 ? '\n' : ' '); // 格式
}
return 0;
}