栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

XJOI一级四段题解(g++,即C++),也可视作C++算法竞赛教程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XJOI一级四段题解(g++,即C++),也可视作C++算法竞赛教程

目录

Problem 3536 判断奇偶性

一 题目内容

二 新知识点

三 思路

四 AC代码

Problem 1112 交换变量

一 题目内容

二 新知识点

2.1 swap(a,b)的用法

三 思路

四 AC代码

Problem 8050 逻辑运算运用1

一 题目内容

二 新知识点

2.1 逻辑运算符——与、或、非

2.2 逻辑运算的优先级

三 思路

四 AC代码

Problem 3539 美丽数

一 题目内容

二 新知识点

三 思路

四 AC代码

Problem 3540 优美数

一 题目内容

二 新知识点

三 思路

四 AC代码

Problem 8051 逻辑运算运用2

一 题目内容

二 新知识点

三 思路

四 AC代码

Problem 8054 逻辑运算运用5

一 题目内容

二 新知识点

三 思路

四 AC代码

Problem 1109 行李托运

一 题目内容

二 新知识点

2.1 if-else if-else语句和if-else if语句

三 思路

四 AC代码

Problem 3538 判断直角三角形

一 题目内容

二 新知识点

2.1 勾股定理的逆定理

三 思路

四 AC代码

Problem 1175 分西瓜

一 题目内容

二 新知识点

三 思路

四 AC代码

Problem 3536 判断奇偶性

一 题目内容

时间:0.2s    空间:32M

题目描述:

判断一个整数是奇数还是偶数,如果是奇数,输出"odd", 如果是偶数输出"even"

输入格式:

输入一个整数

输出格式:

输出格式见题目描述

样例输入1:

2

样例输出1:

even

样例输入2:

1

样例输出2:

odd

约定:

二 新知识点

本题没有新知识点。

三 思路

根据偶数的定义,能被2整除的数是偶数,否则就是奇数。明确这点后可使用if-else语句进行判断并输出结果。

四 AC代码
#include
using namespace std;
int main(){
    int n;
    cin>>n;
    if(n%2==1){
        cout<<"odd";
    }else{
        cout<<"even";
    }
    return 0;
}

Problem 1112 交换变量 一 题目内容

时间:1s   空间:256M

题目描述:

随意输入两个数,,通过交换将大的数放在中,小的数放在中。

输入格式:

输入一行,包含两个整数,

输出格式:

输出两行,每行一个整数,输出交换后的,

样例输入:

4 5

样例输出:

5
4
二 新知识点

2.1 swap(a,b)的用法

对于两个数(int,double等类型),可以通过swap(a,b)交换这两个数。比如:

int a=1,b=2;
swap(a,b);
cout<

输出结果如下:

2 1
三 思路

用if语句判断是否小于,如果是,就交换两数。

四 AC代码
#include
using namespace std;
int main(){
    int x,y;
    cin>>x>>y;
    if(x 

Problem 8050 逻辑运算运用1 一 题目内容

时间:0.2s     空间:32M

题目描述:

输入三个数,如果b>c" src="https://latex.codecogs.com/gif.latex?a%3Eb%3Ec" />,输出YES,不然输出NO

输入格式:

输入三个整数

输出格式:

输出格式见题目描述

样例输入1:

4 3 2

样例输出1:

YES

样例输入2:

1 3 2

样例输出2:

NO

约定:

二 新知识点

2.1 逻辑运算符——与、或、非

对于两个bool类型的变量,我们有时会想要判断他们是否都成立。这时,就需要用到逻辑运算符之一——与运算。与运算格式如下:

a&&b

只有当a和b都为true时,a&&b的结果才为true,否则为false。

同样地,要判断a和b中是否至少有一个成立,我们要用到或运算,格式如下:

a||b

 这时,只要a和b有一个为true,a||b的结果就为true;当a和b都为false时,a||b才为false。

 若要判断a是否不成立,需要用到非运算,格式如下:

!a

 a为true时,!a为false;a为false时,!a为true。

逻辑运算符一般不单独使用,而是与if语句配合使用。

2.2 逻辑运算的优先级

C++中,非运算的优先级最高,与运算次之,或运算最低。为增强代码的可读性,不管逻辑运算是否按照想要的优先级排列,最好都用括号把逻辑运算括起来(换句话说,如果不添这些括号,可能会让别人和自己读起来费劲些)。例如:

你想要先求a&&b,令其为d,再求d||c。则写出代码如下:

a&&b||c

由于与运算的优先级比或运算高,因此该语句会按照预想的情况运行。但为了增加代码可读性,最好添加括号如下:

(a&&b)||c

但如果要先求c||a,令其为d,再求d&&b,则代码如下:

c||a&&b

显然,a&&b会先被执行,不符合预想情况。则添括号如下:

(c||a)&&b
三 思路

使用a>b&&b>c即可判断,注意不能直接写a>b>c。

四 AC代码
#include
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    if(a>b&&b>c){
        cout<<"YES";
    }else{
        cout<<"NO";
    }
    return 0;
}

Problem 3539 美丽数 一 题目内容

时间:0.2s     空间:32M

题目描述:

如果一个数是一个偶数而且大于50,我们称它为美丽数

给你一个数,判断它是否是美丽数

输入格式:

输入一个整数

输出格式:

如果是美丽数,输出"yes", 否则输出"no"

样例输入1:

50 

样例输出1:

no

样例输入2:

52

样例输出2:

yes

约定:

二 新知识点

本题没有新知识点。

三 思路

根据题意判断即可,注意判断偶数的方法是n%2==0。

四 AC代码
#include
using namespace std;
int main(){
    int n;
    cin>>n;
    if(n>50&&n%2==0){
        cout<<"yes";
    }else{
        cout<<"no";
    }
    return 0;
}

Problem 3540 优美数 一 题目内容

题目描述:

如果一个数是一个偶数或者大于50,我们称它为优美数

输入格式:

输入一个整数

输出格式:

如果是优美数,输出"yes", 否则输出"no"

样例输入1:

50

样例输出1:

yes

样例输入2:

2

样例输出2:

yes

约定:

二 新知识点

本题没有新知识点。

三 思路

用或运算连接与50" src="https://latex.codecogs.com/gif.latex?n%3E50" />,再加以判断即可。

四 AC代码
#include
using namespace std;
int main(){
    int n;
    cin>>n;
    if(n%2==0||n>50){
        cout<<"yes";
    }else{
        cout<<"no";
    }
    return 0;
}

Problem 8051 逻辑运算运用2 一 题目内容

时间限制:0.2s 内存限制:32M
【题目描述】

当一个数字满足以下两个条件之一时,我们会将其视为“Good数”:

1.数字是5的倍数。

2.数字是3的倍数且数小于等于20。

判断给定的数字是否是一个Good数,并输出“YES”或“NO”。

输入格式
一个整数。
输出格式

“YES”或 “NO”(实际输出没有引号)。
样本输入 1

10
样本输出 1

YES

样本输入 2
21
样本输出 2
NO
约束

二 新知识点

本题没有新知识点。

三 思路

这题的逻辑运算其实不难,但有一个小坑点:

当一个数字满足以下两个条件之一时,我们会将其视为“Good数”

这跟或运算不同。在这道题中,同时满足两个条件的数是不被算作Good数的。所以,为了符合题目要求,我们使用两个bool类型变量a1和a2分别表示该数是否满足两个条件,用语句

(!a1&&a2)||(a1&&!a2)

判断即可。

四 AC代码
#include
using namespace std;
int main(){
    bool a1=false,a2=false; //是否满足两个条件
    int n;
    cin>>n;
    if(n%5==0){
        a1=true;
    }
    if(n%3==0&&n<=20){
        a2=true;
    }
    if((!a1&&a2)||(a1&&!a2)){
        cout<<"YES";
    }else{
        cout<<"NO";
    }
    return 0;
}

Problem 8054 逻辑运算运用5 一 题目内容

时间:0.2s   空间:32M

题目描述:

给定3个数a,b,c,若存在两个数之和大于第三个数的三倍,输出YES,不然输出NO

输入格式:

三个整数a,b,c

输出格式:

输出格式见题目描述

样例输入1:

3 4 5

样例输出1:

NO

样例输入2:

3 4 6

样例输出2:

YES

约定:

二 新知识点

本题没有新知识点。

三 思路

依题意,用以下代码判断即可:

a+b>3*c||b+c>3*a||a+c>3*b
四 AC代码
#include
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    if(a+b>3*c||b+c>3*a||a+c>3*b){
        cout<<"YES";
    }else{
        cout<<"NO";
    }
    return 0;
}

Problem 1109 行李托运 一 题目内容

时间:1s   空间:256M

题目描述:

计算行李的托运费用:如果行李重量不超过30kg,每公斤0.2元;如果行李重量大于30kg,但是不超过60kg,超过30公斤部分按每公斤0.6元算;如果行李重量超过60公斤,不允许行李托运,报告“NO”。在键盘上输入行李重量,屏幕显示行李托运的结果。

输入格式:

一个整数,表示行李重量

输出格式:

输出一行,如果行李可以托运,输出为一个浮点数(结果保留2位小数点);如果行李不可以托运,则输出“NO”

样例输入:

36

样例输出:

9.60
二 新知识点

2.1 if-else if-else语句和if-else if语句

有时我们需要判断的条件比较复杂,仅靠if-else语句无法满足需求,这时就需要if-else if-else或if-else if语句,前者格式如下:

if(条件1){
    //语句1
}else if(条件2){
    //语句2
}else if(条件3){
    //语句3
}else if(条件4){
...
...
...
...
}else{
    //语句n
}

若条件1满足,则语句1执行;否则(当条件1不满足时),若条件2满足,则语句2执行;......若条件1~n-1都不满足,则进入else部分,执行语句n。

当然,也可以略去else语句,格式如下所示:

if(条件1){
    //语句1
}else if(条件2){
    //语句2
}else if(条件3){
    //语句3
}else if(条件4){
...
...
...
}else if(条件n){
    //语句n
}

其执行方式与if-else if-else语句基本相同,只是若条件n也不满足,则直接跳过该语句。

三 思路

依题意判断并计算即可,注意浮点数要保留2位小数输出。

四 AC代码
#include
using namespace std;
int main(){
    int a;
    cin>>a;
    if(a>60){
        cout<<"NO";
    }else if(a>30){
        printf("%.2lf",30*0.2+0.6*(a-30));
    }else{
        printf("%.2lf",0.2*a);
    }
}

Problem 3538 判断直角三角形 一 题目内容

时间:0.2s    空间:32M

题目描述:

输入三角形的三条边,判断是否是直角三角形

输入格式:

输入三角形3条边(均为整数)

输出格式:

如果3条边组成的是直角三角形,输出yes否则输出no

样例输入:

3 4 5

样例输出:

yes

约定:

数据保证

二 新知识点

2.1 勾股定理的逆定理

勾股定理的逆定理陈述如下:设的三边满足,则是直角三角形。证明如下:

 如图,作使得,,且,则根据勾股定理,。根据,,则。

三 思路

直接判断即可,注意a、b、c的顺序不定。

四 AC代码
#include
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    if(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b){
        cout<<"yes"< 

Problem 1175 分西瓜

注:此题与CF4A(Codeforces上的第4A题)题意相同。

一 题目内容

时间:1s     空间:256M

题目描述:

给你一个西瓜的重量,问你能否将这个西瓜分成两部分,每个部分都是偶数。

输入格式:

输入一行,包含一个整数,表示西瓜的重量

输出格式:

输出一行,见样例。

样例输入1:

8

样例输出1:

YES, you can divide the watermelon into two even parts.

样例输入2:

3

样例输出2:

NO, you can't divide the watermelon into two even parts.

约定:

提示:

要注意检查你的输出格式要跟样例输出一模一样才能通过,尤其别忘了句子最后的小点哦

二 新知识点

本题没有新知识点。

三 思路

我们知道偶数+偶数=偶数,因此只要是偶数都是YES,但2除外(因为它只能分解成1+1或0+2,但显然不能分成一份重量为0的部分)。

四 AC代码
#include
using namespace std;
int main(){
    int a;
    cin>>a;
    if(a%2==0&&a!=2){
        cout<<"YES, you can divide the watermelon into two even parts."
    }else{
        cout<<"NO, you can't divide the watermelon into two even parts.";
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号