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;
    }
    
  • 相关阅读:
    多说社交评论插件学习《一》
    《转》每天起床时,优秀创业者都会问自己这3个问题
    老赵面试题参考答案(二)《转》
    老赵面试题参考答案(一)《转》
    20个开源项目托管站点推荐
    .NET面试题(二)
    .NET面试题(一)
    Python笔记(28)-----继承
    pytorch实战(2)-----回归例子
    深度学习之入门Pytorch(1)------基础
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3364585.html
Copyright © 2011-2022 走看看