旋转骰子
Posted wangmou-233-1024-com
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旋转骰子相关的知识,希望对你有一定的参考价值。
玛莎有n个骰子,每个骰子的6个面上都恰好有一个0到9之间的数字。
现在玛莎将利用这n个筛子来制作新数字。她把n个骰子摆成一排,然后从左到右查看骰子的上表面并读取,即可得到一个新数字。随后她不断的旋转每个骰子的面就可以得到不同的新数字。旋转骰子需要满足以下规则: 1、制作的数字不能包含前导零; 2、制作新数字时不需要使用所有的骰子; 3、使用骰子旋转,无法将数字9转换为数字6,反之亦然。
给定n个骰子,玛莎可以用它们构成从1到x的所有整数。玛莎想知道,对于给定的n个骰子,这个x的最大取值是多少呢?
输入格式:
第一行仅一个整数n,表示骰子的数量(1≤n≤3)。
接下来n行,每行包含6个整数a[i][j](0≤a[i][j]≤9),表示第i个骰子的第j个面上的数字。
输出格式:
输出一个整数,即最大数x,玛莎可以使用她的骰子构成数字从1到x。如果无法构成1,则输出0。
#include <stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
int* pa=(int*)a;
int* pb=(int*)b;
int num1=*pa;
int num2=*pb;
return num1-num2;
}
int main (){
int b[10]={0,1,2,3,4,5,6,7,8,9};
int cnt[10]={0,0,0,0,0,0,0,0,0,0,};
int n,i,j,k,h,m=0;
scanf("%d",&n);
int a[n][6];
int output=0;
int c[234];
for(i=0;i<234;i++){
c[i]=0;
}
for(i=0;i<n;i++){
for(j=0;j<6;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<6;j++){
if(a[i][j]==b[0]) cnt[0]++;
if(a[i][j]==b[1]) cnt[1]++;
if(a[i][j]==b[2]) cnt[2]++;
if(a[i][j]==b[3]) cnt[3]++;
if(a[i][j]==b[4]) cnt[4]++;
if(a[i][j]==b[5]) cnt[5]++;
if(a[i][j]==b[6]) cnt[6]++;
if(a[i][j]==b[7]) cnt[7]++;
if(a[i][j]==b[8]) cnt[8]++;
if(a[i][j]==b[9]) cnt[9]++;
}
}
if(n>1){
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
for(k=0;k<6;k++){
for( m=0;m<6;m++){
c[h]=a[i][m]*10+a[j][k];
c[h+1]=a[j][k]*10+a[i][m];
h=h+2;
}
}
}
}
}
for(i=0;i<n;i++){
for(k=0;k<6;k++){
c[h]=a[i][k];
h++;
}
}
qsort(c,234,sizeof(int),cmp);
for(i=0;i<234;i++){
if(c[i+1]-c[i]>1){
break;
}
}
printf("%d",c[i]);
return 0;
}
以上是关于旋转骰子的主要内容,如果未能解决你的问题,请参考以下文章