当前位置: 首页 > news >正文

2025-4-11-C++ 学习 分支结构(下)

2025-4-11-C++学习 分支结构(下)

  继续,题目有点难度了,需要考虑的东西变多了。

P5717 【深基3.习8】三角形分类

题目描述

给出三条线段 a , b , c a,b,c a,b,c 的长度,均是不大于 10000 10000 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?

  • 如果三条线段不能组成一个三角形,输出Not triangle
  • 如果是直角三角形,输出Right triangle
  • 如果是锐角三角形,输出Acute triangle
  • 如果是钝角三角形,输出Obtuse triangle
  • 如果是等腰三角形,输出Isosceles triangle
  • 如果是等边三角形,输出Equilateral triangle

如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。

输入格式

输入 3 个整数 a a a b b b c c c

输出格式

输出若干行判定字符串。

输入输出样例 #1

输入 #1

3 3 3

输出 #1

Acute triangle
Isosceles triangle
Equilateral triangle

输入输出样例 #2

输入 #2

3 4 5

输出 #2

Right triangle

输入输出样例 #3

输入 #3

6 10 6

输出 #3

Obtuse triangle
Isosceles triangle

输入输出样例 #4

输入 #4

1 14 5

输出 #4

Not triangle

说明/提示

当两短边的平方和大于一长边的平方,说明是锐角三角形。

当两短边的平方和等于一长边的平方,说明是直角三角形。

当两短边的平方和小于一长边的平方,说明是钝角三角形。

题解代码

挺有趣的题目,感觉像是在 复习小学数学运算。

#include <bits/stdc++.h>
using namespace std;

void swap(int& a, int& b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

int main()
{
    int a, b, c;
    cin >> a >> b >> c;

    if ( a > b)
    {
        swap(a,b);
    }
    if ( a > c)
    {
        swap(a,c);
    }
    if(b > c)
    {
        swap(b,c);
    }


    if((a+b>c)&&(a+c>b)&&(b+c>a))
     {
        if((a*a + b*b )== c*c)
         {
            cout << "Right triangle" << endl;
         }
        else if((a*a + b*b ) > c*c)
         {
            cout << "Acute triangle" << endl;
         }
        else if((a*a + b*b ) < c*c )
         {
            cout << "Obtuse triangle" << endl;
         }
        if(a == b || b == c || a == c)
         {
            cout << "Isosceles triangle" << endl;
         }
        if(a == b && b == c)
         {
            cout << "Equilateral triangle" <<endl;
          }

     }
    else
     {
        cout << "Not triangle" << endl;
     }
    return 0;
}

P1422 小玉家的电费

题目描述

夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电 [2006]27 号规定,月用电量在 150 150 150 千瓦时及以下部分按每千瓦时 0.4463 0.4463 0.4463 元执行,月用电量在 151 ∼ 400 151\sim 400 151400 千瓦时的部分按每千瓦时 0.4663 0.4663 0.4663 元执行,月用电量在 401 401 401 千瓦时及以上部分按每千瓦时 0.5663 0.5663 0.5663 元执行。小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入格式

输入一个正整数,表示用电总计(单位以千瓦时计),不超过 10000 10000 10000

输出格式

输出一个数,保留到小数点后 1 1 1 位(单位以元计,保留到小数点后 1 1 1 位)。

输入输出样例 #1

输入 #1

267

输出 #1

121.5

题解代码

典型的数学题,分类讨论。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a;
    cin >> a;
    double ans;
    if (a <= 150)
    {
        ans = a * 0.4463; 
    }
    if(a > 150 && a <= 400)
    {
        ans = 150*0.4463 + (a - 150) * 0.4663;
    }
    if(a > 400)
    {
        ans = 150*0.4463 + 250*0.4663 + (a-400)*0.5663;
    }
    cout << fixed << setprecision(1) << ans << endl;
    return 0;
}

P1424 小鱼的航程(改进版)

题目背景

题目描述

有一只小鱼,它平日每天游泳 250 250 250 公里,周末休息(实行双休日),假设从周 x x x 开始算起,过了 n n n 天以后,小鱼一共累计游泳了多少公里呢?

输入格式

输入两个正整数 x , n x,n x,n,表示从周 x x x 算起,经过 n n n 天。

输出格式

输出一个整数,表示小鱼累计游泳了多少公里。

输入输出样例 #1

输入 #1

3 10

输出 #1

2000

说明/提示

数据保证, 1 ≤ x ≤ 7 1\le x \le 7 1x7 1 ≤ n ≤ 1 0 6 1 \le n\le 10^6 1n106

题解代码

用的是模拟过程的办法。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int x, n;
    cin >> x >> n;
    int ans = 0;
    x -= 1;
    while(n > 0)
        {
            if(x<5)
            {
                ans += 250;
            }
            x++;
            x %=7;
            n--;
        }
    cout << ans << endl;
    return 0;
}

P1888 三角函数

题目描述

输入一组勾股数 a , b , c ( a ≠ b ≠ c ) a,b,c(a\neq b\neq c) a,b,ca=b=c,用分数格式输出其较小锐角的正弦值。(要求约分。)

输入格式

一行,包含三个正整数,即勾股数 a , b , c a,b,c a,b,c(无大小顺序)。

输出格式

一行,包含一个分数,即较小锐角的正弦值

输入输出样例 #1

输入 #1

3 5 4

输出 #1

3/5

说明/提示

数据保证: a , b , c a,b,c a,b,c 为正整数且 ∈ [ 1 , 1 0 9 ] \in [1,10^9] [1,109]

题解代码

这个题有趣的很,可以好好复习一下求取最大公约数的方法,辗转相除法,同时可以调用已有的函数 __gcd(a,b)

#include <bits/stdc++.h>
using namespace std;

long long gcd(long long a, long long b)
{
    int aa = a,bb = b;
    while(aa != bb)
        {
            if(aa > bb)
            {
                aa = aa - bb;
            }
            else
            {
                bb = bb - aa;
            }
        }
    return aa;
}

int main()
{
    int a[3], factor;
    for(int k1=0;k1<3;++k1)
        {
            cin >> a[k1];
        }
    sort(a,a+3);
    factor = gcd(a[0],a[2]);
    cout << a[0] / factor << "/" << a[2] / factor << endl;
    return 0;
}

P1046 [NOIP 2005 普及组] 陶陶摘苹果

题目描述

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 10 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 30 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知 10 10 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入格式

输入包括两行数据。第一行包含 10 10 10 100 100 100 200 200 200 之间(包括 100 100 100 200 200 200)的整数(以厘米为单位)分别表示 10 10 10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 100 100 120 120 120 之间(包含 100 100 100 120 120 120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出格式

输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

输入输出样例 #1

输入 #1

100 200 150 140 129 134 167 198 200 111
110

输出 #1

5

说明/提示

【题目来源】

NOIP 2005 普及组第一题

题解代码

条件列好,挺好判断的。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[10],h;
    for (int k1=0;k1<10;++k1)
        {
            cin >> a[k1];
        }
    cin >> h;
    int ans = 0;
    for (int k1=0;k1<10;++k1)
        {
            if(a[k1] <= (h + 30))
            {
                ans++;
            }
        }
    cout << ans << endl;
    return 0;
}

P4414 [COCI 2006/2007 #2] ABC

题目描述

三个整数分别为 A , B , C A,B,C A,B,C。这三个数字不会按照这样的顺序给你,但它们始终满足条件: A < B < C A < B < C A<B<C。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。

输入格式

第一行包含三个正整数 A , B , C A,B,C A,B,C,不一定是按这个顺序。这三个数字都小于或等于 100 100 100。第二行包含三个大写字母 A A A B B B C C C(它们之间没有空格)表示所需的顺序。

输出格式

在一行中输出 A A A B B B C C C,用一个 (空格)隔开。

感谢 @smartzzh 提供的翻译

输入输出样例 #1

输入 #1

1 5 3
ABC

输出 #1

1 3 5

输入输出样例 #2

输入 #2

6 4 2
CAB

输出 #2

6 2 4

题解代码

三个循环,写起来稍微有点费劲。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[3];
    for(int k1=0;k1<3;++k1)
        {
            cin >> a[k1];
        }
    char ch[3];
    for(int k1=0;k1<3;++k1)
        {
            cin >> ch[k1];
        }
    
    sort(a,a+3);
    for(int k1=0;k1<3;++k1)
        {
            if (ch[k1] == 'A') cout << a[0] << " ";
            if (ch[k1] == 'B') cout << a[1] << " ";
            if (ch[k1] == 'C') cout << a[2] << " ";
        }
    
    return 0;
}

P1055 [NOIP 2008 普及组] ISBN 号码

题目描述

每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 9 9 9 位数字、 1 1 1 位识别码和 3 3 3 位分隔符,其规定格式如 x-xxx-xxxxx-x,其中符号 - 就是分隔符(键盘上的减号),最后一位是识别码,例如 0-670-82162-4就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如 0 0 0 代表英语;第一个分隔符 - 之后的三位数字代表出版社,例如 670 670 670 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以 1 1 1 加上次位数字乘以 2 2 2 ……以此类推,用所得的结果 $ \bmod 11$,所得的余数即为识别码,如果余数为 10 10 10,则识别码为大写字母 X X X。例如 ISBN 号码 0-670-82162-4 中的识别码 4 4 4 是这样得到的:对 067082162 9 9 9 个数字,从左至右,分别乘以 1 , 2 , … , 9 1,2,\dots,9 1,2,,9 再求和,即 0 × 1 + 6 × 2 + … … + 2 × 9 = 158 0\times 1+6\times 2+……+2\times 9=158 0×1+6×2+……+2×9=158,然后取 158   m o d   11 158 \bmod 11 158mod11 的结果 4 4 4 作为识别码。

你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出 Right;如果错误,则输出你认为是正确的 ISBN 号码。

输入格式

一个字符序列,表示一本书的 ISBN 号码(保证输入符合 ISBN 号码的格式要求)。

输出格式

一行,假如输入的 ISBN 号码的识别码正确,那么输出 Right,否则,按照规定的格式,输出正确的 ISBN 号码(包括分隔符 -)。

输入输出样例 #1

输入 #1

0-670-82162-4

输出 #1

Right

输入输出样例 #2

输入 #2

0-670-82162-0

输出 #2

0-670-82162-4

说明/提示

2008 普及组第一题

题解代码

这道题考虑的有点欠缺了,主要是问题太长了,不过也怪自己不仔细,
要把控住输入与输出,中间过程可以自己试着灵活调控。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    char a[13];
    int b[10];
    int idx = 0;
    for (int k1=0;k1<13;++k1)
        {
            cin >> a[k1];
            if((a[k1] >= '0' && a[k1] <= '9') || a[k1] == 'X')
            {
                if(idx<10)
                {
                    if(a[k1] == 'X')
                    {
                        b[idx] = 10;
                    }
                    else
                    {
                        b[idx] = a[k1] - '0';
                    }
                }
                idx++;
            }
            
        }

    int ansNum = 0;
    for(int k1=0;k1<9;++k1)
        {
            ansNum += b[k1]*(k1+1);           
        }
    
    int ans = 0;
    int endNum = ansNum % 11;
    if (endNum == b[9])
    {
        ans = 1;
    }

    if(ans == 1)
    {
        cout << "Right" << endl;
    }
    else
    {
        for(int k1=0;k1<12;++k1)
            {
                cout << a[k1];
            }
        if(endNum == 10)
        {
            cout << 'X' << endl;
        }
        else
        {
            cout << endNum <<endl;
        }
        
    }
    return 0;
}

相关文章:

  • dify 500错误
  • 银行业务发展历史
  • 不使用docker在本地安装与配置RAGFlow
  • kubernetes入门篇之创建一个nginx容器
  • 100道C++ 高频经典面试题带解析答案
  • 蓝桥杯考前复盘
  • AI低代码平台:开启高效智能开发新时代
  • ubuntu不生成core文件的处理
  • ‌ViewModel和AndroidViewModel的主要区别
  • NOIP2012提高组.疫情控制
  • 【Python 开源】你的 Windows 关机助手——PyQt5 版定时关机工具
  • 二分查找3:69. x 的平方根
  • 使用Docker安装Gogs
  • MySQL 半同步复制,给数据找靠谱 “分身”
  • MCP协议下人工智能康复理疗智械融合编程方向分析
  • 【转载翻译】使用Open3D和Python进行点云处理
  • Matlab 三维时频图
  • 使用WasmEdge将InternLM集成到Obsidian,打造本地智能笔记助手
  • LibreOffice Writer使用01去除单词拼写判断的红色下划线
  • sql server统计小时数据中每日最大风速及风速对应的风向
  • 平谷区住房城乡建设委官方网站/拉新推广赚钱的app
  • 新手学做网站txt/市场调研的内容
  • 徐州网站制作流程/东莞网站建设推广品众
  • 如何查询网站的服务器/做网页设计的软件
  • wordpress bootstrap 主题/seo学习
  • 货车保险哪家网站可以直接做/百度网址大全官网