最多是3个魔方,也就是最多有18个面,可以知道可以得到的最大的x是98,假如是99的话,那么有9个面要是1到9,剩下的9个面要是0到9,但是超过了剩余的面数,然后要是x最大为98的话,前9个面可以安排为1到9,后9个面安排为0到8,刚好9个面,所以可以知道x最大也就是98.
#include<bits/stdc++.h>
using namespace std;
int vis[100];
int cu[4][7];
int main()
{
int n;
cin>>n;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
for(int j=1;j<=6;j++)
cin>>cu[i][j];
if(n==1)//枚举出1个魔方可以得到的所有个位数
{
for(int i=1;i<=6;i++)
vis[cu[1][i]]=1;
}
else
if(n==2)//枚举出2个魔方可以得到的所有十位数
{
for(int i=1;i<=2;i++)
for(int j=1;j<=6;j++)
vis[cu[i][j]]=1;
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
{
int tmp1=cu[1][i],tmp2=cu[2][j],tmp3,tmp4;
tmp3=tmp1*10+tmp2;
tmp4=tmp2*10+tmp1;
vis[tmp3]=1;
vis[tmp4]=1;
}
}
else//枚举出3个魔方可以得到的所有十位数
{
for(int i=1;i<=3;i++)
for(int j=1;j<=6;j++)
vis[cu[i][j]]=1;
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
{
int tmp1=cu[1][i],tmp2=cu[2][j],tmp3,tmp4;
tmp3=tmp1*10+tmp2;
tmp4=tmp2*10+tmp1;
vis[tmp3]=1;
vis[tmp4]=1;
}
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
{
int tmp1=cu[1][i],tmp2=cu[3][j],tmp3,tmp4;
tmp3=tmp1*10+tmp2;
tmp4=tmp2*10+tmp1;
vis[tmp3]=1;
vis[tmp4]=1;
}
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
{
int tmp1=cu[2][i],tmp2=cu[3][j],tmp3,tmp4;
tmp3=tmp1*10+tmp2;
tmp4=tmp2*10+tmp1;
vis[tmp3]=1;
vis[tmp4]=1;
}
}
for(int i=1;i<=99;i++)//从最小的1往后找,第一个没被标记的就是能表示的数的最大值了
if(!vis[i])
{
cout<<i-1<<endl;
return 0;
}
}