zoukankan      html  css  js  c++  java
  • 寒假作业pta3

    某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X)。捕鼠夹可重复利用,不计成本,奶酪每块3元。
    聪明的老鼠呢?它们每天可能会派出一只老鼠到墙角,看看墙角有啥:

    若什么也没有(X),老鼠们就不高兴了(Unhappy),会有长达一天(也就是第二天)的不高兴期。在不高兴期间,不派出老鼠。不高兴期结束之后,派出老鼠。
    若有捕鼠夹(T),这只老鼠被引诱吃掉奶酪并被打死(Dead),老鼠们会有长达两天(也就是第二和第三天)的伤心期。在伤心期间,不派出老鼠。伤心期结束之后,派出老鼠。在这种情况下,抓到1只老鼠可获得奖励10元,但同时也耗费了一块奶酪。注意,如果某一天放置了捕鼠夹但老鼠没有出现,则没有耗费奶酪。
    若有奶酪(C),老鼠吃了奶酪会很开心(Happy!),会有长达两天(第二和第三天)的兴奋期。在兴奋期间,即使叠加了不高兴或者伤心,也必定派出老鼠。在这种情况下,没抓到老鼠,而且耗费了一块奶酪。注意,如果某一天放置了奶酪但老鼠没有出现,则奶酪可以下次再用,没有耗费。
    现在给你连续几天的操作序列,且已知第一天肯定会派出老鼠,请判断老鼠每天的状态,并计算盈利。

    输入格式:
    输入在一行中给出连续的由C或T或X组成的不超过70个字符的字符串,以$结束。字符串中每个字符表示这一天的操作( 即X:什么都不放;T:放捕鼠夹;C:放奶酪)。题目保证至少有一天的操作输入。

    输出格式:
    要求在第一行输出连续的字符串,与输入相对应,给出老鼠的状态:

    ! 表示派出老鼠吃到奶酪
    D 表示派出老鼠被打死
    U 表示派出老鼠无所获

    • 表示没有派出老鼠
      第二行则应输出一个整数表示盈利。(如果有亏损,则是负数)

    输入样例1:
    TXXXXC$
    输出样例1:
    D--U-!
    4
    输入样例2:
    CTTCCX$
    输出样例2:
    !DD--U
    11

    #include <stdio.h>
    
    int main()
    {
        char operating;
        int profit = 0, Sad = 0, Unhappy = 0, Excited = 0;
        int flagOfSad, flagOfUnhappy, flagOfExcited;
    
        while (scanf("%c", &operating) && operating != '$')         // 非'$'字符循环输入操作
        {
            flagOfSad = flagOfUnhappy = flagOfExcited = 1;          // flag初始化
    
            switch (operating)                                      // 使用switch语句来多选择操作
            {
            case 'T':
                if((Sad == 0 && Unhappy == 0) || (Excited != 0))
                {
                    printf("D");
                    Sad = 2; 
                    profit += 7;
                    flagOfSad = 0;
                }
                else
                    printf("-");
            break;
            // --------------------
            case 'C':
                if ((Sad == 0 && Unhappy == 0) || (Excited != 0))
                {
                    printf("!");
                    Excited = 2;
                    profit -= 3;
                    flagOfExcited = 0;
                }
                else
                    printf("-");
            break;
            // --------------------
            case 'X':
                if ((Sad == 0 && Unhappy == 0) || (Excited != 0))
                {
                    printf("U");
                    Unhappy = 1;
                    flagOfUnhappy = 0;
                }
                else
                    printf("-");
            break;
            }
            // 判断是否为初次操作
            if (Sad && flagOfSad) Sad--;
            if (Excited && flagOfExcited) Excited--;
            if (Unhappy && flagOfUnhappy) Unhappy--;
        }
        printf("
    %d", profit);
        
        return 0;
    }
    

    2、设计思路:
    先利用样本把题目理解清楚,构成基本思路,分为三类情况:T、C、X分别对应D、!、U,当处于伤心期和不高兴期就不会派出老鼠则为-。然后就是判断并计算三种时期维持的时间,才能得出第二天是否会派出老鼠。注意一点,T之后两天会处于兴伤心期,无论如何都不会派老鼠出来。C呢,之后两天会处于高兴期,无论如何都会派老鼠出来。而X之后一天不会派老鼠出来。然后就是计算成本和利润,T会消耗一个奶酪即三元,但抓住老鼠会奖励十元,所以获得七元,C仅消耗奶酪三元,而X则无情况。天数可能较多所以需要用到循环结构while。
    3、遇到的问题:
    自己无法计算三种时期的天数,所以无法准确判断老鼠派出情况。通过上网查询才理解
    if (Sad && flagOfSad) Sad--;
    if (Excited && flagOfExcited) Excited--;
    if (Unhappy && flagOfUnhappy) Unhappy--;
    若为真就执行,若其中以一个为假就不会执行,这个就是判断并计算时间的程序。

    提交作业时未截图。所以只有截屏最后结果了。

  • 相关阅读:
    Creating a generic Web Parts for hosting ASP.NET User Controls
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 1)
    How to use CreateChildContorls method inherited from System.Web.UI.Control
    How to quickly access Web Part Management Page
    SQL Script tips for MS SQL Server
    How to enable single signon service on the SPS
    A brief summary of UML & Rational Rose – Use Case Diagram, Part II
    Borland Together for Visual Studio.Net V2.0 安装问题
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 2)
    体验ReSharper V1.0 for VS.Net 2003 Part I
  • 原文地址:https://www.cnblogs.com/94ha-xc/p/10406786.html
Copyright © 2011-2022 走看看