1057 Undercut

本文介绍了一款名为Undercut的纸牌游戏及其计分逻辑。该游戏中两名玩家各自拥有五张编号为1到5的卡片,每轮比赛双方同时展示卡片并依据规则计算得分。文章详细解释了不同情况下得分的计算方法,并提供了实现这一逻辑的C++代码示例。

Undercut

Time limit: 1 Seconds   Memory limit: 32768K  
Total Submit: 9696   Accepted Submit: 2267  

Undercut is a card game where two players each have five cards numbered one through five. At each round, each player selects a card, then simultaneously reveals it. If the cards are of equal value, there is no score. Otherwise, there are two cases: the two cards are exactly one point apart (this is called an undercut), or the cards are more than one point apart. In the latter case, the person revealing the larger of the cards gets the number of points on the larger card. In the case of an undercut the player with the lower card gets the sum of the two cards. The exception to this is when the cards are 1 and 2, in which case the player with the lower card gets 6 points (instead of only 3 points). After each round, the cards are returned to the hands and they play another round.

For example, if there are 5 rounds and player A plays (in this order) 5, 3, 1, 3, 5 and player B plays 3, 3, 3, 3, 4, then the scoring for each round would be: A gets 5 points, no points, B gets 3 points, no points, B gets 9 points. The totals would be A: 5, B: 12.

In this problem you will be given card plays for both players and must determine the final scores.

Input

There will be multiple input instances. Each instance will be one game. The first line of input for a game will be an integer n <= 20. (A value of n = 0 terminates input.) The next two lines will each contain n integers between 1 and 5 inclusive indicating the cards played on each of n rounds. The first line are player A's card plays and the second line are player B's card plays.

Output

Each input instance should generate one line of output of the form:

A has a points. B has b points.

where the value of a and b are for you to determine. A blank line should separate output lines.

Sample Input

5
5 3 1 3 5
3 3 3 3 4
4
2 3 1 1
1 5 5 5
0

Sample Output

A has 5 points. B has 12 points.

A has 0 points. B has 21 points.

http://acm.zju.edu.cn/show_problem.php?pid=1057 

 

#include  < iostream >
using   namespace  std;

int  aScore, bScore;
int  Ca[ 1000 ], Cb[ 1000 ];
int  n;

int  check( int  m,  int  n);
void  solve();

int  main()
{
    
int  i;
    
int  flag  =   1 ;

    cin 
>>  n;

    
while  ( n  !=   0  )
    {
        aScore 
=   0 ;
        bScore 
=   0 ;
        
        
for  ( i  =   0 ; i  <  n; i ++  )
            cin 
>>  Ca[i];
        
for  ( i  =   0 ; i  <  n; i ++  )
            cin 
>>  Cb[i];

        
if  ( flag  ==   0  )
            cout 
<<  endl;
        solve();
    
        cin 
>>  n;
        flag 
=   0 ;
    }

    
return   0 ;
}

int  check( int  m,  int  n)
{
    
if  ( m  -  n  ==   1  )
    {
        
if  ( m  ==   2  )
            
return   1 ;
        
else
            
return   2 ;
    }
    
else   if  ( n  -  m  ==   1  )
    {
        
if  ( n  ==   2  )
            
return   3 ;
        
else
            
return   4 ;
    }
    
else   if  ( m  -  n  >=   2  )
        
return   5 ;
    
else   if  ( n  -  m  >=   2  )
        
return   6 ;
    
return   0 ;
}

void  solve()
{
    
int  i;

    
for  ( i  =   0 ; i  <  n; i ++  )
    {
        
switch  ( check(Ca[i], Cb[i]) )
        {
        
case   1 : bScore  +=   6 ;
            
break ;
        
case   2 : bScore  +=  (Ca[i]  +  Cb[i]);
            
break ;
        
case   3 : aScore  +=   6 ;
            
break ;
        
case   4 : aScore  +=  (Ca[i]  +  Cb[i]);
            
break ;
        
case   5 : aScore  +=  Ca[i];
            
break ;
        
case   6 : bScore  +=  Cb[i];
            
break ;
        
default continue ;
        }
    }

    cout 
<<   " A has  "   <<  aScore  <<   "  points. B has  "  
        
<<  bScore  <<   "  points. " ;
    cout 
<<  endl;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值