zoukankan      html  css  js  c++  java
  • PTA旋转骰子

    PTA旋转骰子

    题目描述

    玛莎有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。

    输入样例:

    3
    0 1 3 5 6 8
    1 2 4 5 7 8
    2 3 4 6 7 9
    

    输出样例:

    98
    

    思路

    • 建立一个二维数组a[][10]a[i][j]>=1表示第i个骰子至少存在一个数字j。
    • 从1到9,检查三个骰子是否具有1-9之间的数字
    • 从10到99,检查三个骰子是否具有10-99之间的数字
    • 从100到999,检查三个骰子是否具有100-999之间的数字?
    • 实际上不必去检查100到999,因为要如果要经过99必先经过88,77,66,55,44,33,22,11,10,19,而这样已经至少需要18个数字,而3个骰子最多能够承载18个数字。

    代码

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    int a[3][10];
    using namespace std;
    int main()
    {
       int n;
       cin>>n;
       memset(a,0,sizeof(a));
       int x; 
       int flag_1=0;
       for( int i=0;i<n;i++)
       {
       	   for( int j=0;j<6;j++)
       	   {
       	        cin>>x;
       	        if(x==1)flag_1=1;
    			a[i][x]++;   
    	   }
       }
       
       if(flag_1==0)
       {
       	cout<<0;
       	return 0;
       }
       for( int i=1;i<=9;i++)
       {
       	   int flag=0;
    	   for( int j=0;j<n;j++)
    	   {
    	   	   if(a[j][i]>=1)
    	   	   {
    	   	   	    flag=1;
    	            break;	   	
    		   }
           }	   
           if(!flag)
    	   {
    	   	    cout<<i-1;
    	        return 0; 
    	   }
       }
       
        for( int i=10;i<=99;i++)
       {
       	    int x=i/10;
       	    int y=i%10;
       	    int flag=0;
       	    for( int j=0;j<n;j++)
    	   {
    	   	    for( int k=j+1;k<n;k++)
    	       {
    	   	        if((a[j][x]>=1&&a[k][y]>=1)||(a[k][x]>=1&&a[j][y]>=1))
    	   	        {
    	   	        	flag=1;
    	   	        	goto action2;
    				}
               }
           }
           cout<<i-1;
           return 0;
           action2: ;	    
       }   
       return 0;
    }
    
  • 相关阅读:
    LocalImprove算法
    Improve算法
    CSU-ACM2014年校队选拔赛指导赛解题报告
    CSU-ACM暑假集训基础组训练赛(4)解题报告
    CSU-ACM暑假集训基础组七夕专场
    CSU-ACM暑假集训基础组训练赛(2) 解题报告
    CSU-ACM2014暑假集训基础组训练赛(1) 解题报告
    Aizu 2164 CSUOJ 1436 Revenge of the Round Table
    插头DP小结
    Codeforces 128C Games with Rectangle
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/14523635.html
Copyright © 2011-2022 走看看