UVa 127--``Accordian'' Patience

#include<stdio.h>
typedef struct CARD
{
char rank;
char suit;        
}CARD;
bool move(CARD card[][52],int top[],int *position)
{
	int index=*position;
	if(top[index]==-1)
		return false;
	int temp=index;
	int count=0;
	while(count!=3&&temp>=1)
	if(top[--temp]!=-1)
		count++;
     if(count==3)
	 {
		 if(card[index][top[index]].rank==card[temp][top[temp]].rank||card[index][top[index]].suit==card[temp][top[temp]].suit)
		 {                                                                                                               
		  top[temp]++;
		  card[temp][top[temp]].rank=card[index][top[index]].rank;
		  card[temp][top[temp]].suit=card[index][top[index]].suit;
		  top[index]--; 
		  *position=temp;
		  return true;
		 }
	 }
	 temp=index;
	 count=0;
	 while(count!=1&&temp>=1)
       if(top[--temp]!=-1)
		count++;
     if(count==1)
	 {
		 if(card[index][top[index]].rank==card[temp][top[temp]].rank||card[index][top[index]].suit==card[temp][top[temp]].suit)
		 {                                                                                                                        
		  top[temp]++;
		  card[temp][top[temp]].rank=card[index][top[index]].rank;
		  card[temp][top[temp]].suit=card[index][top[index]].suit;
		  top[index]--; 
		  *position=temp;
		  return true;
		 }
	 }
     return false;
}
int main()
{
char lineone[78];
char linetwo[78];
int i,j;
while(gets(lineone))
{
	if(lineone[0]=='#')
	break;
	gets(linetwo);
	CARD card[52][52];
	int top[52]={0};
	for(i=0,j=0;i<78;)
	{
		card[j][0].rank=lineone[i++];
		card[j][0].suit=lineone[i++];
		i++;
		j++;
	}
	for(i=0,j=26;i<78;)
	{
	    card[j][0].rank=linetwo[i++];
		card[j][0].suit=linetwo[i++];
		i++;
		j++;
	}	
	int position=1;
	while(position!=52)
	{
		if(!(move(card,top,&position)&&top[position]!=-1))
		position++;                           
    }
    int total=0;
	for(i=0;i<52;i++)
	if(top[i]!=-1)
       total++;
    if(total!=1)
	printf("%d piles remaining:",total);
	else
	printf("%d pile remaining:",total);
    for(i=0;i<52;i++)
	if(top[i]!=-1)
    printf(" %d",top[i]+1);
	printf("\n");
}
return 0;   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值