乒乓球问题 c语言 90分 没通过 知道答案者留下

本文介绍了一个简单的计分程序,该程序使用C语言实现,能够处理两种不同比赛模式(11分制和21分制)的得分记录,并输出每局比赛的结果。程序首先读取用户的输入,将每个有效字符视为一分,然后根据得分情况判断每局的胜者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>


#define MAX_NUM 400000


int main(void)
{
    char Score[MAX_NUM] = {0};//每一次的分数
int Count = 0;//胜负一共的数
int Win = 0;//胜次数
int Lose = 0;//输的次数
char Temp[MAX_NUM] = {0};
char ch;
int Index = 0;


//获取输入字符
while(1)
{
ch = getchar();
//
if(ch == 'E')
{
break;
}
else if(ch == 'W' || ch == 'L')
{
Score[Count++] = ch;
}
}


//11分一局 计算并输出
while( Index <= Count)
{
//计算本局比分 有一方达到11分并且分差大于2分 或者至少一方分数大于11并且分差大于两分
while( Index < Count)
{
if(Score[Index] == 'W')
{
Win++;
Index++;
}
else if(Score[Index] == 'L')
{
Lose++;
Index++;
}


//判断输赢
if(Win == 11 && Lose < 10)
{
break;
}
else if(Lose == 11 && Win < 10)
{
break;
}
else if( Win > 11 && Win - Lose > 1 )
{
break;
}
else if( Lose > 11 && Lose - Win > 1 )
{
break;
}
}
//输出本局结果
printf("%d:%d\n", Win,Lose);
if( Win == 0 &&  Lose == 0 || Index == Count)
{
Win = Lose = 0;
break;
}
Win = Lose = 0;
}


//
Index = 0;
printf("\n");


//21分一局 计算并输出
while( Index <= Count)
{
//计算本局比分 有一方达到21分并且分差大于2分 或者至少一方分数大于21并且分差大于两分
while( Index < Count)
{
if(Score[Index] == 'W')
{
Win++;
Index++;
}
else if(Score[Index] == 'L')
{
Lose++;
Index++;
}


//判断输赢
if(Win == 21 && Lose < 20)
{
break;
}
else if(Lose == 21 && Win < 20)
{
break;
}
else if( Win > 21 && Win - Lose > 1 )
{
break;
}
else if( Lose > 21 && Lose - Win > 1 )
{
break;
}
}
//输出本局结果
printf("%d:%d\n", Win,Lose);
if( Win == 0 &&  Lose == 0 || Index == Count)
{
Win = Lose = 0;
break;
}
Win = Lose = 0;
}


//while(1);
return 0;
}
### 关于洛谷平台上的乒乓球问题解决方案 对于洛谷平台上涉及乒乓球问题的解决方法,在C语言中的实现可以基于动态规划的思想来处理。给定的问题描述似乎并不完全匹配所提供的代码片段,该片段主要关注最长上升子序列(Longest Increasing Subsequence, LIS),而非具体的乒乓球比赛逻辑[^1]。 然而,如果考虑的是类似于计算得、判断胜负等典型的乒乓球竞赛场景下的编程挑战,则通常会涉及到输入双方选手的比赛数,并依据特定规则决定最终胜者或是展示比分变化过程等问题。下面给出一段简化版的模拟乒乓球赛制下判定胜利者的C语言程序: ```c #include <stdio.h> int main() { int scoreA = 0; int scoreB = 0; char winner; while (scoreA < 21 && scoreB < 21 || abs(scoreA - scoreB) <= 1) { // 假设采用21制且需领先两获胜 scanf("%d %d", &scoreA, &scoreB); // 输入当前回合后的累计数 if ((scoreA >= 21 && scoreA - scoreB >= 2)) { winner = 'A'; break; } if ((scoreB >= 21 && scoreB - scoreA >= 2)) { winner = 'B'; break; } } printf("The match ends with player %c as the winner.\n", winner); return 0; } ``` 此段代码仅作为示例展示了如何通过循环读取每轮次之后两位玩家各自的总并据此确定哪位玩家赢得了整场比赛。实际比赛中可能还需要考虑到更多细节如发球权转换、局间休息等情况,这取决于具体题目要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值