球魁 C语言

球魁

问题描述

A 十分喜欢打篮球,天天打球的他投篮百发百中,成为了学校的球魁,于是他开始嘲笑不会打球的 B。为了捍卫自己的尊严,B 进行了一个暑假的苦练,也达到了百发百中的投篮命中率,于是他向A 挑战,一场球魁争夺赛开始了。

他们打算用罚球线投篮计分的方式一决胜负,规则如下:

① 首先利用骰子的点数 n 来决定谁先投球,若是偶数,则 A 先投;若是奇数,则 B 先投。

② 比赛分为 r 轮,一人投一轮,轮流投篮。(例如:若A 先投,则第二轮 B 投,第三轮又轮到 A 投,依此类推,直至到第 r 轮结束)

③ 由于双方的投篮命中率都是百分百,所以每一轮他们都能投中,理论上投中一球得两分,但由于 A受今年篮球世界杯中国男篮的影响,他每次投球都有一个心情值 L,若 L 是素数,则他的得分仍为 2 分;特别地,当 L 为 11 时,他的得分变为 3 分;若 L 是合数,则他的得分变为 1 分,特别地,当 L 为 15 时,他的得分变为 0 分。而 B忙着打算法比赛没看世界杯,所以不受影响(即每一球均为两分)。

现在,他们找你作为裁判为他们计分,并判断谁赢得比赛,而身为软工的大学生,你准备写个程序,让程序来算。

输入

第一行输入两个整数 r (1≤r≤2000) 和 n (1≤n≤6),分别代表比赛的轮数和骰子的点数。

接下来输入一行,共 q 个正整数 L (2≤L≤100),用空格隔开。其中,q 代表 r 轮中 A 的轮数和,L 代表心情值。

说明:

若轮到 A 投篮,则输入一个心情值 L;若轮到 B 投篮,则无需输入。

例如,当 r=7,n=2r = 7, n = 2r=7,n=2 时,q 为 4。因为 A 先发球,则轮到 A投球的轮数有第一轮,第三轮,第五轮,第七轮,共四轮。

输出

输出一行,显示比赛结果:若是 A 赢,则输出 A wins.;若是 B 赢,则输出 B wins.;若是平局,则输出 equal.

解答

#include <stdio.h>
int main()
{
    int r, n, q, p, L, lwh = 0, lzh = 0, i;
    scanf("%d %d", &r, &n);
    if(n%2 == 0)
    {
        if(r%2 == 0) q = r/2;
        else q = (r + 1)/2;
    }
    else
    {
        if(r%2 == 0) q = r/2;
        else q = (r - 1)/2;
    }
    p = r - q;
    for(i = 1; i<=q; i++)
    {
        scanf("%d", &L);
        if(L == 2||L == 3||L == 5||L == 7||L == 13||L == 17||L == 19||L == 23||L == 29||L == 31||L == 37||L == 41||L == 43||L == 47||L == 53||L == 59||L == 61||L == 67||L == 71||L == 73||L == 79||L == 83||L == 89||L == 97) lwh += 2;
        else if (L == 11) lwh += 3;
        else if (L == 15);
        else lwh += 1;
    }
    lzh = p*2;
    if (lwh>lzh) printf("A wins.");
    else if (lwh<lzh) printf("B wins.");
    else printf("equal.");
    return 0;
}

总结

第一次这么长的代码一次性AC 0 debug(就目前这个阶段来说),有点小开心hhh。
这题题目思路很清晰了。

题源 : oj.socoding.cn

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值