洛谷-分支结构

洛谷–分支结构

题目来源于洛谷,若有侵权,私信后立刻删除

P5709 【深基2.习6】Apples Prologue / 苹果和虫子

题目描述

小 B 喜欢吃苹果。她现在有 mmm1≤m≤1001 \le m \le 1001m100)个苹果,吃完一个苹果需要花费 ttt0≤t≤1000 \le t \le 1000t100)分钟,吃完一个后立刻开始吃下一个。现在时间过去了 sss1≤s≤100001 \le s \le 100001s10000)分钟,请问她还有几个完整的苹果?

输入格式

输入三个非负整数表示 m,t,sm, t, sm,t,s

输出格式

输出一个整数表示答案。

输入输出样例 #1

输入 #1

50 10 200

输出 #1

30

说明/提示

如果你出现了 RE,不如检查一下被零除?

ps:注意

  • 1.t为0的情况(出现RE)
  • 2.s分钟后吃完的情况
  • 3.整除的情况
#include
using namespace std;
int main()
{
    int m,t,s;
    cin>>m>>t>>s;
    if (t==0)cout<<0;
    else{
        if((float)(s/t)>=(float)m)cout<<0;
        else{
            if(s%t==0)cout<<m-s/t;
            else cout<<m-(int)(s/t)-1;
        }
    }
    return 0;
}


P5710 【深基3.例2】数的性质

题目描述

一些整数可能拥有以下的性质:

  • 性质 1:是偶数;
  • 性质 2:大于 444 且不大于 121212

小 A 喜欢这两个性质同时成立的整数;Uim 喜欢这至少符合其中一种性质的整数;小 B 喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个整数 xxx,请问他们是否喜欢这个整数?

输入格式

输入一个整数 x(0≤x≤1000)x(0\le x \le 1000)x(0x1000)

输出格式

输出这 444 个人是否喜欢这个数字,如果喜欢则输出 1,否则输出 0,用空格分隔。输出顺序为:小 A、Uim、小 B、正妹。

输入输出样例 #1

输入 #1

12

输出 #1

1 1 0 0

ps:小心思:

  • 1.4个布尔型代表四个人,方便输出(true输出就是1),写代码逻辑也更顺
  • 2.两个布尔型代表两个性质,减少条件判断的编写

有些绕的点:Uim只要一个成立就可,B是J1!=J2,已经正妹的bool值改变条件怎么写

代码:

#include
using namespace std;
int main() {
    bool A = false, Uim = false, B = false, M = false, J1 = false, J2 = false;
    int input;
    cin >> input;
    if (input % 2 == 0)J1 = true;
    if (input > 4 && input <= 12)J2 = true;

    if (J1 && J2)A = true;
    if(J1||J2)Uim = true;
    if (J1 != J2)B = true;
    if (!J1 && !J2)M = true;
    cout << A << ' ' << Uim << ' ' << B << ' ' << M;
    return 0;
}

闰年判断

ps:1.使用布尔值输出 2.判断条件
代码:

#include
using namespace std;
int main(){
    int year;
    cin>>year;
    bool _year;
    if(year%400==0)_year=true;
    else if(year%100!=0&&year%4==0)_year=true;
    else _year=false;
    cout<<_year;
    return 0;
}

P5712 【深基3.例4】Apples

题目描述

小 B 喜欢吃苹果。她今天吃掉了 xxx 个苹果。英语课上学到了 apple 这个词语,想用它来造句。如果她吃了 1 个苹果,就输出 Today, I ate 1 apple.;如果她没有吃,那么就把 1 换成 0;如果她吃了不止一个苹果,别忘了 apple 这个单词后面要加上代表复数的 s。你能帮她完成这个句子吗?

输入格式

输入一行一个自然数 xxx,表示吃掉的苹果数。

输出格式

根据题目要求输出。

输入输出样例 #1

输入 #1

1

输出 #1

Today, I ate 1 apple.

输入输出样例 #2

输入 #2

3

输出 #2

Today, I ate 3 apples.

说明/提示

对于所有数据,0≤x≤1000\le x \le 1000x100

ps:小心思:三目运算符简化操作
注意空格,**Today,**后有一个空格
代码:

#include

using namespace std;
int main()
{
    int a;
    cin >> a;
    cout << "Today, I ate " << a << (a > 1 ?  " apples." : " apple.");
    return 0;
}

P5715 【深基3.例8】三位数排序

题目描述

给出三个整数 a,b,c(0≤a,b,c≤100)a,b,c(0\le a,b,c \le 100)a,b,c(0a,b,c100),要求把这三位整数从小到大排序。

输入格式

输入三个整数 a,b,ca,b,ca,b,c,以空格隔开。

输出格式

输出一行,三个整数,表示从小到大排序后的结果。

输入输出样例 #1

输入 #1

1 14 5

输出 #1

1 5 14

输入输出样例 #2

输入 #2

2 2 2

输出 #2

2 2 2

ps:我使用的是**比较蠢(带双引号)**的直接if-else,有种就是故意受罪的感觉,但是只有亲身自己写一遍这个看起来简单的if-else,才会知道这其实并不像看起来那样简单
代码:

#include

using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a > b) {
        if (b > c)cout << c << ' ' << b << ' ' << a;
        else {
            if (a > c)cout << b << ' ' << c << ' ' << a;
            else cout << b << ' ' << a << ' ' << c;
        }

    }
    else {
        if (a > c)cout << c << ' ' << a << ' ' << b;
        else {
            if (c > b)cout << a << ' ' << b << ' ' << c;
            else cout << a << ' ' << c << ' ' << b;
        }

    }
    return 0;
}

PPS:可以使用库函数中的sort(默认从小到大)直接将数组(含a,b,c)直接排序,然后一个循环输出)

P5716 【深基3.例9】月份天数

题目描述

输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。

输入格式

输入两个正整数,分别表示年份 yyy 和月数 mmm,以空格隔开。

输出格式

输出一行一个正整数,表示这个月有多少天。

ps:小心思:直接写两张月份表,按照布尔值_year(是否闰年)选择两张表
代码:

#include
using namespace std;
int main()
{
    int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    int a2[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
    int year, month;
    bool _year;
    cin >> year >> month;
    if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))_year = true;
    else _year = false;

    if (_year)cout << a2[month - 1];
    else cout << a[month - 1];

    return 0;
}

P1085 [NOIP 2004 普及组] 不高兴的津津

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入格式

输入包括 777 行数据,分别表示周一到周日的日程安排。每行包括两个小于 101010 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式

一个数字。如果不会不高兴则输出 000,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,71, 2, 3, 4, 5, 6, 71,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

输入输出样例 #1

输入 #1

5 3
6 2
7 2
5 3
5 4
0 4
0 6

输出 #1

3

ps:小心思:

  • 1.使用is_happy来判断有无不高兴的天数,只要有一天,就不可能是0,因而不用再转成true之类的操作
  • 2.使用max_study_time和max_study_time_num来配合记录最不高兴的一天,只有大于max_study_time的情况下才发生变动,对应题目的如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

代码:

#include
using namespace std;
int main() {
    bool is_happy = true;
    int max_study_time = 0, max_study_time_num, time1,time2;

    for (int i = 1; i <= 7; i++) {
        cin >> time1>>time2;
        if (time1 + time2 > 8) {
            is_happy = false;
        }
        if (!is_happy&&(time1+time2>max_study_time)) {
            max_study_time = time1 + time2;
            max_study_time_num=i;
        }
    }

    if (is_happy)cout << 0;
    else cout << max_study_time_num;

    return 0;
}

P1909 [NOIP 2016 普及组] 买铅笔

题目背景

NOIP2016 普及组 T1

题目描述

P 老师需要去商店买 nnn 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 333 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P 老师决定只买同一种包装的铅笔。

商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 nnn 支铅笔才够给小朋友们发礼物。

现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 nnn 支铅笔最少需要花费多少钱。

输入格式

第一行包含一个正整数 nnn,表示需要的铅笔数量。

接下来三行,每行用 222 个正整数描述一种包装的铅笔:其中第 111 个整数表示这种包装内铅笔的数量,第 222 个整数表示这种包装的价格。

保证所有的 777 个数都是不超过 100001000010000 的正整数。

输出格式

111 个整数,表示 P 老师最少需要花费的钱。

输入输出样例 #1

输入 #1

57
2 2
50 30
30 27

输出 #1

54

输入输出样例 #2

输入 #2

9998
128 233
128 2333
128 666

输出 #2

18407

输入输出样例 #3

输入 #3

9999
101 1111
1 9999
1111 9999

输出 #3

89991

ps:主要是解释一下+0.999操作这个。首先代码中对num是做了个类型转换成float,原因是如果两个int相除,小数部分是会直接截断,所以不可以做到只要有小数部分就向上取整的操作

代码:

#include
using namespace std;
int main() {
    int n, min_sum, num, price;
    cin >> n >> num >> price;
    //cout <<"(int)(n / num) "<< (int)(n / num) << endl;
    //cout << "(int)(n / num + 0.9999999) :" << (int)((float)n / num +0.999) << endl;
    min_sum = ((int)((float)n / num + 0.9999999)) * price;
    //cout << num << ' ' << price << ' ' << min_sum << endl;

    for (int i = 0; i < 2; i++) {
        int _num, _price;
        cin >> _num >> _price;

        //cout <<" i " <<" "<< _num <<" " << _price << endl;;
        int sum = (int)((float)n / _num + 0.9999) * _price;
        if (sum < min_sum)min_sum = sum;
    }

    cout << min_sum;

    return 0;
}

P1424 小鱼的航程(改进版)

题目描述

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

输入格式

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

输出格式

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

输入输出样例 #1

输入 #1
3 10

输出 #1

2000

说明/提示

数据保证,1≤x≤71\le x \le 71x71≤n≤1061 \le n\le 10^61n106

ps:小心思:1.使用布尔值判断周末 2.循环式累加(当x==7时,先变成0,再自增,不用写其他条件判断)

代码:

#include
using namespace std;
int  main() {
    bool is_weekend ;
    int x, n, sum = 0;
    cin >> x >> n;
    for (int i = 0; i < n; i++) {
        if (x == 6 || x == 7) {
            is_weekend = true;
        }
        else is_weekend = false;


        if (!is_weekend)sum += 250;
        if (x == 7)x = 0;
        x++;
    }
    cout << sum;
    return 0;
}

P1888 三角函数

题目描述

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

输入格式

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

输出格式

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

输入输出样例 #1

输入 #1

3 5 4

输出 #1

3/5

说明/提示

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

ps:难点:1.求最大公约数 2.找最大最小值(当然有别的方法,我的代码有自讨苦吃之嫌疑)

代码:

#include
using namespace std;

int gcd(int a, int b) {
    int temp=1;
    while (temp) {
        temp = a % b;
        a = b;
        b = temp;
    }
    return a;
}

int main()
{
    int a, b, c,num;
    cin >> a >> b >> c;
    c = (a > b ? a : b) > (b > c ? b : c) ? (a > b ? a : b) : (b > c ? b : c);
    a = (a < b ? a : b) < (b < c ? b : c) ? (a < b ? a : b) : (b < c ? b : c);
    
    //cout << "max:" << c << " min :" << a << endl;

    num = gcd(a, c);

    cout << (a / num) << "/" << (c / num);

    return 0;

}

你可能感兴趣的:(刷题,算法,c++,开发语言)