L1-085 试试手气
我们知道一个骰子有 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
样例解释:
这 3
次摇出的结果依次为:
6 5 6 6 6 6
5 4 4 5 5 5
4 3 3 3 4 3
代码
#include<stdio.h>
int main()
{
int a[6],b[6]={0},i,n,j,t; //数组b用来装 6个骰子的初始点数
for(i=0;i<6;i++) //将初始点数输入到a数组
{
scanf("%d",&a[i]);
b[i]=a[i]; //将点数值放入下标相同的b数组
}
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<6;j++)
{
if(i==0) //准备第一次摇
{
if(a[j]!=6) //如果初始点数不是6 赋值6
a[j]=6;
else //初始点数是6 在原来的基础上--
a[j]--;
}
else if(i!=0) //第一次之后
{
if(a[j]-1==b[j]) //接下来摇出的点数与初始点数相同 需要跳过 -2
a[j]=a[j]-2;
else //接下来摇出的点数与初始点数不相同 -1
a[j]--;
}
}
}
for(i=0;i<6;i++) //输出 控制空格
{
if(i<5)
printf("%d ",a[i]);
else
printf("%d",a[i]);
}
return 0;
}
提交结果: