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;
    }
    
  • 相关阅读:
    自己动手制作symbian签名
    中移动陈大庆:中国移动JAVA4.1规范和SDK工具
    角色扮演游戏引擎的设计原理
    小团队开发J2ME游戏的阶段划分
    角色扮演游戏中敌人AI(人工智能)的设计方法
    入门:Android 文档的阅读顺序
    2016 MultiUniversity Training Contest 1
    真我
    DBA是我的梦想
    解决VS2010自带的C/C++编译器CL找不到mspdb100.dll的问题
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3364585.html
Copyright © 2011-2022 走看看