旋转骰子

玛莎有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;
} 
原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12433123.html