zoukankan      html  css  js  c++  java
  • 18.6.27 水题整理(2)--2nd 上机

    A:石头剪刀布

    描述

    石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

    一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?

    输入

    输入包含三行。
    第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。
    第二行包含NA个整数,表示小A出拳的规律。
    第三行包含NB个整数,表示小B出拳的规律。
    其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。

    输出

    输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。

    样例输入

    10 3 4
    0 2 5
    0 5 0 2

    样例输出

    A

    提示

    对于测试数据,猜拳过程为:
    A:0 2 5 0 2 5 0 2 5 0
    B:0 5 0 2 0 5 0 2 0 5
    A赢了4轮,B赢了2轮,双方打平4轮,所以A赢的轮数多。

     1 #include <cstdio>
     2 #include <string>
     3 #include <algorithm>
     4 #include <stdlib.h>
     5 
     6 using namespace std;
     7 
     8 const int maxn = 105;
     9 int a[maxn], b[maxn];
    10 int n, na, nb;
    11 
    12 void init() {
    13     scanf("%d%d%d", &n, &na, &nb);
    14     for (int i = 0; i < na; i++)
    15         scanf("%d", &a[i]);
    16     for (int i = 0; i < nb; i++)
    17         scanf("%d", &b[i]);
    18 }
    19 
    20 void game() {
    21     int ap = 0, bp = 0;
    22     int awin = 0, bwin = 0;
    23     for (int i = 1; i <= n; i++) {
    24         int res = a[ap] - b[bp];
    25         switch (res) {
    26         case -2:
    27         case -3:
    28         case 5:
    29             awin++; break;
    30         case 2:
    31         case 3:
    32         case -5:
    33             bwin++; break;
    34         }
    35         ap++, bp++;
    36         ap %= na, bp %= nb;
    37     }
    38     if (awin == bwin)
    39         printf("draw
    ");
    40     else if (awin > bwin)
    41         printf("A
    ");
    42     else
    43         printf("B
    ");
    44 }
    45 
    46 int main()
    47 {
    48     init();
    49     game();
    50     return 0;
    51 }
    View Code

    D:买房子

    描述

    某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得N万全都积攒起来,问第几年能够买下这套房子?(第一年年薪N万,房价200万)

    输入

    一行,包含两个正整数N(10 <= N <= 50), K(1 <= K <= 20),中间用单个空格隔开。

    输出

    如果在第20年或者之前就能买下这套房子,则输出一个整数M,表示最早需要在第M年能买下,否则输出Impossible。

    样例输入

    50 10
    

    样例输出

    8
    #include <cstdio>
    #include <string>
    #include <algorithm>
    #include <stdlib.h>
    #include <set>
    
    using namespace std;
    
    const int maxn = 105;
    int n, k;
    
    void init() {
        scanf("%d%d", &n, &k);
    }
    
    void game() {
        int year = 1, flag = 0, sum = 0;
        double price = 200;
        for (; year <= 20; year++) {
            sum += n;
            if (sum >= price)
            {
                flag = 1;
                printf("%d
    ", year);
                break;
            }
            price = price * (double)(100 + k) / 100.0;
        }
        if (!flag)
            printf("Impossible
    ");
    }
    
    int main()
    {
        init();
        game();
        return 0;
    }
    View Code

    E:抓住那头牛

    描述

    农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

    1、从X移动到X-1或X+1,每次移动花费一分钟
    2、从X移动到2*X,每次移动花费一分钟
     
    假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

     

    输入

    两个整数,N和K

    输出

    一个整数,农夫抓到牛所要花费的最小分钟数

    样例输入

    5 17

    样例输出

    4
     1 #include <cstdio>
     2 #include <string>
     3 #include <algorithm>
     4 #include <stdlib.h>
     5 #include <set>
     6 #include<queue>
     7 
     8 using namespace std;
     9 
    10 const int maxn = 100005;
    11 int n, k;
    12 int visited[maxn];
    13 
    14 struct poi {
    15     int x, step;
    16     poi(int n,int m) :x(n),step(m) {  }
    17 };
    18 queue<poi> seek;
    19 
    20 void init() {
    21     scanf("%d%d", &n, &k);
    22 }
    23 
    24 void game() {
    25     seek.push(poi(n,0));
    26     while (!seek.empty()) {
    27         int now = (seek.front()).x,step= (seek.front()).step;
    28         if (now == k) {
    29             printf("%d
    ", step);
    30             break;
    31         }
    32         seek.pop();
    33         if (now - 1 >= 0 && visited[now - 1] == 0) {
    34             seek.push(poi(now-1,step+1));
    35             visited[now - 1] = 1;
    36         }
    37         if (now + 1 <= 100000 && visited[now + 1] == 0) {
    38             seek.push(poi(now+1,step+1));
    39             visited[now + 1] = 1;
    40         }
    41         if (2*now <=100000 && visited[2*now] == 0) {
    42             seek.push(poi(2 * now, step + 1));
    43             visited[2*now] = 1;
    44         }
    45     }
    46 }
    47 
    48 int main()
    49 {
    50     init();
    51     game();
    52     return 0;
    53 }
    View Code
    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    第一章Python 数据模型
    Numpy 之 where理解
    探析熟悉而又困惑的参数:argc && argv
    python读书笔记
    经典进程的同步问题之——读者写者
    经典进程的同步问题之——哲学家进餐
    冰多多团队博客目录
    团队事后分析
    冰多多团队Gamma阶段发布说明
    gamma测试报告
  • 原文地址:https://www.cnblogs.com/yalphait/p/9234260.html
Copyright © 2011-2022 走看看