zoukankan      html  css  js  c++  java
  • 【题解】枪声问题

    题目描述

    大联欢的最后项目是小明和小李的射击比赛。比赛规则是这样的,每次两人同时射击,每个人有S枚子弹进行射击,第1秒两人同时打出第一枚子弹,以后的s-1子弹可以自己根据一定的间隔时间打出,设小明后面的子弹每隔t1秒打出一枚子弹,小李后面的子弹每隔t2秒打出一枚子弹,如t1=2时,则小明子弹打出的时刻分别为1,4,7,10,13,...,同理可得小李子弹打出的时刻。如果某一时刻两人同时打出子弹,则只能听到一次响声,你知道这两个人的比赛过程中我们共能听到几次枪声吗?

    输入输出格式

    输入格式:

    第一行有一个正整数S,它的范围[1...100000]。

    第二行有一个正整数t1,它的范围[1...10000]。

    第三行有一个正整数t2,它的范围[1...10000]。

    输出格式:

    一行,表示比赛过程中能听到几次枪声。

    输入输出样例

    输入样例:
    5 
    2 
    3
    输出样例:
    8
    这道题可以这么想,如果开枪时间重合,那么小明打出子弹的时间点 mod t2 一定会等于1
    那么,如果两者开枪的时间点重合,小李剩下的子弹减少一枚,总枪声增加;反之只有总枪声增加,最后把总枪声与小李剩下的子弹数相加,便可得到答案!
    具体程序如下:
    #include<iostream>
    #include<stack>
    #include<cstdio>
    using namespace std; 
    stack<int>num;
    int n,t1,t2,tp,tn,sum;
    int main()
    {
        scanf("%d%d%d",&n,&t1,&t2);
        tn=n;
        int minn=min(t1,t2);
        int maxx=max(t1,t2);
        ++minn;
        ++maxx;
        for(register int i=1,temp=1;temp<=n;i+=minn,++temp)
        {
            tp=i;
            num.push(tp);
        }
        while(!num.empty())
        {
            tp=num.top();
            if(tp%maxx==1)
            {
                ++sum;
                --tn;
            }
            else ++sum;
            num.pop();
        }
        printf("%d",sum+tn);
    }
    
    
  • 相关阅读:
    Java8-Stream-No.10
    Java8-Stream-No.09
    Java8-Stream-No.08
    Java8-Stream-No.07
    Java8-Stream-No.06
    Java8-Stream-No.05
    Java8-Stream-No.04
    Java8-Stream-No.03
    Java8-Stream-No.02
    Java8-Stream-No.01
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10517701.html
Copyright © 2011-2022 走看看