• 天天快乐编程2020寒假基础班(临海)作业题解


    1.5287: 游戏之我不是签到题

    这个题目就是输入两个字符,是'A'和'C'或者'W'和'A',所以你需要两个字符去存储,你在判断能出现的也只能是' '(单引号)。

    我们可以读入,判断第一个字符,因为他们两个不一样。是'A'就输出"WA",是'W'就输出"AC"

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        char a, b;
        cin >> a >> b;
        if (a == 'A')
        {
            cout << "WA
    ";
        }
        else
        {
            cout << "AC
    ";
        }
        return 0;
    }
    View Code

    2.5221: 重要的话说三遍

    这个题目就是让你输出三行"I'm gonna WIN!"

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        cout<<"I'm gonna WIN!
    ";
        cout<<"I'm gonna WIN!
    ";
        cout<<"I'm gonna WIN!
    ";
        return 0;
    }
    View Code

    3.1489: C语言实验题――字符编码

    读入5个char类型的字符,用原来的字母后面的第4个字母代替原来的字母就是把这个字符+4。

    这个题目你的输入以及输出必须是char类型的。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        char a, b, c, d, e;
        cin >> a >> b >> c >> d >> e;
        a += 4;
        b += 4;
        c += 4;
        d += 4;
        e += 4;
        cout << "password is " << a << b << c << d << e;
        return 0;
    }
    View Code

    4.3068: 阿基米德特性

    这个题目实际上是个数学题目,是不等式变换,但是不要紧我们也可以看看。

    aM>b,比如2M>6,我们是不是可以试出来M=4,是不是和6/2=3有关呢。
         再试一个 5M>29,M=6,和29/5还有关吗。

    是不是M>b/a(直接按照不等式的思想就是a到右边,a为正数,不变号)。

    所以我们只需要解决大于(b/a)的最小整数了。

    1.正好整除需要+1,2.有余数也需要+1,所以这个题目答案就是b/a+1。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a, b;
        cin >> a >> b;
        cout << b / a + 1;
        return 0;
    }
    View Code

    5.1175: C语言实验题――时间间隔

    我们可以把这个时间转换为秒,两个相减就是时间间隔t了。

    (1)t怎么知道有多少小时呢,除以3600。

    t怎么知道还有多少分呢,就是小时剩下的余数即%3600,之后/60。

    t怎么知道还有多少秒呢,就是小时剩下的余数即%3600,再%60,得到剩下的秒。当然也可以一步到位直接%60。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int h1, m1, s1;
        char c;
        //中间还有:,要像IP地址一样用char读取掉
        cin >> h1 >> c >> m1 >> c >> s1;
        int h2, m2, s2;
        cin >> h2 >> c >> m2 >> c >> s2;
        //按照1小时是3600秒,1分钟是60秒进行转换
        int sum = (h1 * 3600 + m1 * 60 + s1) - (h2 * 3600 + m2 * 60 + s2);
        //如果时间差是负数,取正数
        if (sum < 0)
            sum = -sum;
        int h3, m3, s3;
        //得到小时数
        h3 = sum / 3600;
        //得到分钟数
        m3 = (sum % 3600) / 60;
        //得到秒数
        s3 = (sum % 3600) % 60;
        printf("%d:%02d:%02d
    ", h3, m3, s3);
        return 0;
    }
    View Code

    (2)t怎么知道有多少秒呢,可以%60,过河拆桥除以60把秒给抛弃掉。

    t怎么知道还有多少分呢,可以%60,因为你已经把秒给抛弃掉了,那么你现在拿到的就是分钟数,过河拆桥除以60把分钟丢弃。

    t怎么知道还有多少小时呢,过河拆桥剩下的就是。

    我们常用的数字是10进制的,时间你可以理解为是60进制的数。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int h1, m1, s1;
        char c;
        //中间还有:,要像IP地址一样用char读取掉
        cin >> h1 >> c >> m1 >> c >> s1;
        int h2, m2, s2;
        cin >> h2 >> c >> m2 >> c >> s2;
        //按照1小时是3600秒,1分钟是60秒进行转换
        int sum = (h1 * 3600 + m1 * 60 + s1) - (h2 * 3600 + m2 * 60 + s2);
        //如果时间差是负数,取正数
        if (sum < 0)
            sum = -sum;
        int h3, m3, s3;
        //得到秒
        s3 = sum % 60;
        sum /= 60;
        //得到小时
        m3 = sum % 60;
        sum /= 60;
        //得到分
        h3 = sum;
        printf("%d:%02d:%02d
    ", h3, m3, s3);
        return 0;
    }
    View Code

    6.5174: 时间转换

    这个题目直接告诉你时间间隔t了,让你转换一下。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int sum;
        cin >> sum;
        int h, m, s;
        //得到秒
        s = sum % 60;
        sum /= 60;
        //得到小时
        m = sum % 60;
        sum /= 60;
        //得到分
        h = sum;
        printf("%d:%d:%d", h, m, s);
        return 0;
    }
    View Code

    7.1003: 1、2、3、4、5...

    这个题目就是完整的鸡兔同笼问题了,鸡兔同笼的一般解法为。

    假设笼子里全是鸡,那么脚的总只数会比实际小,少算的脚只数就是多算的兔子脚数,这个值是m-2*n。兔子数就是脚数/2,也就是(m-2*n)/2,鸡的只数就是n减去兔子的只数

    会解方程的直接用解方程求解,但是我们可以算出来负数吗,我们由于进行了取整,所以最后脚数也不一定正确,需要判断。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int m,n;
        while(cin>>n>>m,m||n)
        {
            int y=(m-2*n)/2;
            int x=n-y;
            //进行判断,数目不能为负且脚数需要足够
            if(x>=0&&y>=0&&2*x+4*y==m)
            {
                cout<<x<<" "<<y<<"
    "; 
            }
            else
            {
                cout<<"Error
    ";
            }
        }
        return 0;
    }
    View Code

    8.5907: 药房管理

    我们可以使用一个口袋去装没有取上药品人数,取上药了药品要减少取出的药品,没取上我们统计上。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int m, n;
        cin >> m >> n;
        //没有取上药品人数为num
        int num = 0;
        for (int i = 1, x; i <= n; i++)
        {
            cin >> x;
            if (x <= m)
            {
                //取上了,药品总量要减少x
                m = m - x;
            }
            else
            {
                //没有取上
                num++;
            }
        }
        cout << num <<"
    ";
        return 0;
    }
    View Code

    9.5610: 简单21点游戏 

    这个题目我们可以用一个口袋去装n个数的总和,之后分好牌、较好牌和差牌进行判断。

    但是要输出距离,不能出现负数。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        //牌面综合是sum
        int sum=0;
        for (int i = 0,x; i < n; i++)
        {
            cin >> x;
            sum += x;
        }
        if (sum == 21)
        {
            //21点,好牌
            cout << "Yes
    ";
        }
        else if (sum >= 16 && sum <= 21)
        {
            //小于21,但离21比较近(小于等于5)是较好牌
            cout << "Just so so"<< " " << 21 - sum <<"
    ";
        }
        else
        {
            //烂牌
            cout << "No"<< " ";
            //要输出距离,直接相减会得到负数,需要分情况
            if (sum > 21)
            {
                cout << sum - 21<<"
    ";
            }
            else
            {
                cout << 21 - sum <<"
    ";
            }
        }
        return 0;
    }
    View Code

    10.5286: 国庆七天乐

    我们需要一个袋子去装当前AC的题目数,然后按格式输出即可。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int x,y;
        cin>>x>>y;
        //第一天为x题
        int num=x;
        //国庆七天,循环1到7
        for(int i=1;i<=7;i++)
        {
            //按照格式进行输出
            cout<<"10."<<i<<": AC "<<num<<"
    ";
            //明天要比今天多y题
            num+=y;
        }
        return 0;
    }
    View Code

    11.5394: 跳一跳

    我们需要用一个口袋去装这次的总分,但是还有加成分,我们可以再用一个口袋去装。

    有很多局,还需要记录一个最高分,所以还需要一个口袋来装最高分。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int x;
        //设置最大值为0,以及当前值为0
        int ma=0,t=0;
        //设置加成分为0
        int bonus=0;
        while (cin>>x)
        {
            if(x==0)
            {
                //本次结束,最大值需要更新就更新
                if(t>ma)ma=t;
                //当前值以及加成分清空
                t=0;
                bonus=0;
            }
            else if(x==1)
            {
                //跳中,+1即可
                t++;
                //加成分清空
                bonus=0;
            }
            else
            {
                //跳中中心,使用加成分
                //加成分要比之前多2
                bonus+=2;
                //当前值需要加上加成分
                t=t+bonus;
            }
        }
        cout<<ma<<"
    ";
        return 0;
    }
    View Code

    12.1476: C语言实验题――圆周率

    两边同乘上4,就是PI,所以我们可以求出右边答案。

    所以看右面,分子全为1,分母就是我们要枚举1,3,5,7,9直到到4n-1。

    然后第奇数项为正,偶数项为负。

    把i/2也是奇偶相间的,所以就可以解决这个问题了。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        double sum = 0;
        //枚举1,3,5到(4*n-1)
        for (int i = 1; i <= (4*n-1); i+=2)
        {
            //分两种情况进行讨论
            if ((i/2)%2)
                sum -= 1.0 / i;
            else
                sum += 1.0 / i;
        }
        //输出保留五位小数
        printf("%.5f
    ", sum * 4);
        return 0;
    }
    View Code

    13.5218: 大笨钟

    又来一个时间相关的题目,这个题目需要分情况进行讨论。

    12:00之前(包括),都是不会Dang的,之后过正点才Dang。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int h, m;
        char c;
        //中间:需要用char去存储
        cin >> h >> c >> m;
        //12:00(包括)之前直接输出
        if (h < 12 || h == 12 && m == 0)
        {
            printf("Only %02d:%02d.  Too early to Dang.
    ", h, m);
        }
        else
        {
            //超过12点要Dang(h-12)次
            h -= 12;
            //这个小时已经开始,这个小时也需要Dang
            if (m) h++;
            while (h--) cout << "Dang";
            cout << "
    ";
        }
        return 0;
    }
    View Code

    14.1093: 猴子分桃

    这个题目就需要自己去思考了,而且也需要读懂题目。因为我们要能分为5堆,所以就不断*5。

    但是第一次,还要多余1,所以这一次就是 1 + 5 * (sum - 1)。

    然后再推回剩给老猴子的。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n;
        while (cin >> n, n)
        {
            //先求最小需要的桃子数,超过int要使用更大的整型
            long long sum = 1;
            //每次让他正好分五堆
            for (int i = 1; i < n; i++)
                sum *= 5;
            //因为要多一个留给老猴子,所以(sum-1)有五堆,还要加上老猴子的那个
            sum = 1 + 5 * (sum - 1);
            //剩下的桃子数
            long long t = sum;
            //当前的桃子数减去分给老猴子的,分为5堆,剩下4堆
            for (int i = 1; i <= n; i++)
                t = (t - 1) / 5 * 4;
            //n次每次都会分给老猴子一个桃子,总共的需要加上
            t += n;
            cout << sum << " " << t << endl;
        }
        return 0;
    }
    View Code

    15.1418: 复习时间

    可以复习m门课,但是m是无关变量。

    复习一门课的效率为100和这门课的难度差的平方,数字越小这个值越大,我们我们需要一个袋子去装最小值。

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int T;
        cin >> T;
        while (T--)
        {
            int n, m;
            cin >> n >> m;
            int ma;
            //无论如何先偷过来
            cin>>ma;
            //从1到n看看是否需要更新
            for (int i = 1,x; i < n; i++)
            {
                cin>>x;
                //比当前的难度还小,更新
                if(x<ma)ma=x;
            }
            //按照题意输出
            cout<< (100 - ma) * (100 - ma)<<"
    ";
        }
        return 0;
    }
    View Code

    16.5139: 血压

    这个题目不难,读入到EOF,你给while,作为他的判断条件,他会帮你解决的。

    然后我们可以用一个袋子去统计有多少个人血压正常。

    之后还有两种情况让你输出,不能忘记。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        while (cin >> n)
        {
            int num = 0;
            for (int i = 1,x,y; i <= n; i++)
            {
                cin >> x >> y;
                if (x >= 90 && x <= 140 && y >= 60 && y <= 90)
                {
                    num++;
                }
            }
            cout << num << endl;
            if (num == n)
            {
                //所有人血压都正常
                cout << "Perfect
    ";
            }
            if (num == 0)
            {
                //所有人血压都不正常
                cout << "Terrible
    ";
            }
        }
        return 0;
    }
    View Code

    17.1478: C语言实验题――打印金字塔

    课堂上打印图形的一个相似题目,我们仍需要分情况来看。

    比如样例,第1行有4个空格,第2行有2个空格,第3行有0个空格,第i行有(n-i)*2个空格。

    之后正着输出一次,倒着输出一次。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            //输出(n-i)*2个空格
            for (int j = 0; j < (n - i)*2; j++)
                cout << " ";
            //正着输出
            for (int j = 1; j <= i; j++)
            {
                //1前面没有空格
                if (j!=1)cout << " ";
                cout << j;
            }
            //倒着输出
            for (int j = i-1; j >=1; j--)
                cout << " " << j;
            cout << endl;
        }
        return 0;
    }
    View Code

    18.4982: 打印正方形 

    这个题目还是需要找规律,但是规律并不方便找出来,我们可以单独对第一行和最后一行处理。

    如果要找规律是这样的,第一行、第一列、第m行第n列不是空格。

    正方形四个顶点是'+',第一行最后一行的是'-',其他是'|'。

    这个不仅要找规律,还要很好的控制自己的代码。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n;
        while (cin >> n)
        {
            //行数只有列数的一半+1
            int m = n / 2 + 1;
            //循环每一行
            for (int i = 1; i <= m; i++)
            {
                //循环每一列
                for (int j = 1; j <= n; j++)
                {
                    //满足四种情况,不是空格
                    if (i == 1 || j == 1 || i == m | j == n)
                    {
                        //如果是四个顶点输出'+'
                        if ( i == 1 && j == 1  || i == 1 && j == n|| i == m && j == 1 || i == m && j == n)
                            cout << "+";
                        else if (i == 1 || i == m)
                            cout << "-";
                        else
                            cout << "|";
                    }
                    else
                        cout << " ";
                }
                cout << "
    ";
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    获取iphone当前的语言设置
    UIscrollView通过Button来实现view的切换的方法
    Citrix 客户端登录出现wfshell.exe 应用程序错误的解决方法
    WCF 学习资源
    There is no Citrix MetaFrame server configured on the specified address错误的解决方法
    ASP.NET AJAX,WCF,ADO.NET Entity 开发实例
    SC命令配置服务
    Citrix 客户端登录出现wfshell.exe 应用程序错误的解决方法
    删除子窗体中的控件中的某些属性时出现"Selection contains a component introduced in an ancestor form which cannot be deleted."错误的解决方法
    There is no Citrix MetaFrame server configured on the specified address错误的解决方法
  • 原文地址:https://www.cnblogs.com/BobHuang/p/12297463.html
Copyright © 2020-2023  润新知