zoukankan      html  css  js  c++  java
  • UVa 127

    题目:52张扑克,从左到右在平面上排列,按着如下规则处理:

                   1.按照从左到右的顺序,如果一张牌和左边的第一张或者第三张匹配,就把它放到对应的牌上面。

                   2.如果可以移动到多个位置,移动到最左端的牌上面。(匹配:花色或者数值相同)

    分析:数据结构、栈、模拟。对于每叠牌建立一个栈,进行模拟即可。

    注意:每次只移动每叠牌的最顶上的牌。

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    
    using namespace std;
    
    char Card[54][54][3];
    int  Top[54];
    int  Sum;//记录合并的叠数
    
    int match( char* a, char *b )
    {
    	return (a[0] == b[0] || a[1] == b[1]);
    }
    
    int deal( int now, int s )
    {
    	//判断是否能移动s步长 
    	int count = 0,temp = now;
    	while ( temp >= 0 && count < s )
    		if ( Top[-- temp] >= 0 ) 
    			count ++;
    	//判断是否匹配 
    	if ( temp >= 0 && match( Card[now][Top[now]], Card[temp][Top[temp]] ) ) {
    		Top[temp] ++;
    		Card[temp][Top[temp]][0] = Card[now][Top[now]][0];
    		Card[temp][Top[temp]][1] = Card[now][Top[now]][1];
    		if ( -- Top[now] < 0 ) Sum ++;
    		return temp;
    	}else return -1;
    }
    
    int main()
    {
    	while ( scanf("%s",Card[0][0]) && Card[0][0][0] != '#' ) {
    		for ( int i = 1 ; i < 52 ; ++ i )
    			scanf("%s",Card[i][0]);
    		for ( int i = 0 ; i < 52 ; ++ i )
    			Top[i] = 0;
    		
    		Sum = 0;
    		for ( int now = 1 ; now < 52 ; ) {
    			while ( Top[now] < 0 ) now ++;
    			//向左移动3步 
    			int save = deal( now, 3 );
    			if ( save >= 0 ) 
    				now = save;
    			else {
    				//向左移动1步 
    				save = deal( now, 1 );
    				if ( save >= 0 )
    					now = save;
    				else now ++;
    			}
    		}
    		
    		printf("%d pile",52-Sum);
    		if (51 > Sum) printf("s");
    		printf(" remaining:");
    		for ( int i = 0 ; i < 52 ; ++ i )
    			if ( Top[i] >= 0 )
    				printf(" %d",Top[i]+1);
    		printf("
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    时间函数的查询-thinkphp
    关于回退的解决
    get post的区别
    日期函数及其查询
    asp MVC的一些tip总结
    asp.net mvc中cookie的完整理解
    解决.net移除dll文件以后依旧报错
    ASP.net MVC redis完整示例(含集合,哈希,sortedset)
    JavaScript实现图的深度广度优先遍历
    JavaScript实现二叉查找树
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3364585.html
Copyright © 2011-2022 走看看