题号1536 L1-5 试试手气(15分)


题号1536 L1-5 试试手气(15分)

原创 于 2023-03-05 15:16:25 发布 · 粉丝可见 · 137 阅读 · 0 · 0 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/129346019

题目:

我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。

下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。

假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:

1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;


2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。

那么你应该可以预知自己第 n  次( 1 ≤ n ≤ 5 ) 摇出的结果。

输入/输出要求:

输入格式:

第一行:给出 6个骰子的初始点数,即 [ 1 , 6 ] 之间的整数,数字间以空格分隔;



第二行:给出摇的次数 n ( 1 ≤ n ≤ 5 )。

输出格式:

在一行中顺序列出第n次摇出的每个骰子的点数

数字间必须以 1 个空格分隔,行首位不得有多余空格。

样例输入/输出:

输入样例:

3 6 5 4 1 4
3

输出样例:

4 3 3 3 4 3

思路:

这一题,需要注意去理解题目意思以及所给出的条件。

1、 给出 6 个骰子的初始面

1
int original[6];

2、每个骰子摇出的点数都跟它之前任何一次出现的点数不同。

所以使最后要出来的每个骰子尽量最大点数。

1
2
3
4
5
6
7
8
int ans[6];


// 因为还没开始投掷,所以注意要全部初始化为 7,使得后面的投掷尽量得到最大点数 6

for(int i = 0;i < 6;i++){
ans[i] = 7;
}

3、开始投掷

1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < n; i++) {
for (int j = 0; j < 6; j++) {
// 开始投掷,使每个骰子尽量得到最大点数 6
ans[j]--;
if (ans[j] == original[j]) {
// 如果与初始的面数相同了,那就让它尽量不同,得到其最大的点数
ans[j]--;
}
}
}

解题源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
using namespace std;



int main()
{
int original[6];
for (int i = 0; i < 6; i++) {
cin >> original[i];
}

int n;
cin >> n;

int ans[6];
for (int i = 0; i < 6; i++) {
// 因为还没开始投掷,所以注意要全部初始化为 7,使得后面的投掷尽量得到最大点数 6
ans[i] = 7;
}

for (int i = 0; i < n; i++) {
for (int j = 0; j < 6; j++) {
// 开始投掷,使每个骰子尽量得到最大点数 6
ans[j]--;
if (ans[j] == original[j]) {
// 如果与初始的面数相同了,那就让它尽量不同,得到其最大的点数
ans[j]--;
}
}
}

for (int i = 0; i < 6; i++) {
if (!i)
cout << ans[i];
else
cout << ' ' << ans[i];
}
return 0;
}

最后提交:


觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

题号1536 L1-5 试试手气(15分)
http://blog.angindem.cn/2023/03/05/Angindem-CSDN博客/004_4/
作者
Angindem
发布于
2023年3月5日
许可协议