C语言刷题——lesson11

1. BC111-小乐乐与进制转换

题目描述

小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。

输入描述:

输入一个正整数n (1 ≤ n ≤ 109)

输出描述:

输出一行,为正整数n表示为六进制的结果

示例1

输入

6

输出

10

示例2

输入

120

输出

320

参考代码:

#include 
int main()
{
    int n = 0;
    int arr[40] = { 0 };
    int i = 0;
    scanf("%d", &n);
    while (n)
    {
        arr[i++] = n % 6;
        n /= 6;
    }
    for (i--; i >= 0; i--)
    {
        printf("%d", arr[i]);
    }
    return 0;
}

答案解析:

2. BC112-小乐乐求和

题目描述

小乐乐最近接触了求和符号Σ,他想计算img的结果。但是小乐乐很笨,请你帮助他解答。

输入描述:

输入一个正整数n (1 ≤ n ≤ 109)

输出描述:

输出一个值,为求和结果。

示例1

输入

1

输出

1

示例2

输入

10

输出

55

参考代码:

//代码1
#include 
int main()
{
    long long i = 0;
    long long sum = 0;
    long long n = 0;
    scanf("%lld", &n);
    for (i = 1; i <= n; i++)
    {
        sum += i;
    }
    printf("%lld\n", sum);
    return 0;
}
//代码2
#include 
int main()
{
    long long n = 0;
    scanf("%lld", &n);
    printf("%lld", (1 + n) * n / 2);
    return 0;
}

答案解析:

3. BC113-小乐乐定闹钟

题目描述

小乐乐比较懒惰,他现在想睡觉,然后再去学习。他知道现在的时刻,以及自己要睡的时长,想设定一个闹钟叫他起床学习,但是他太笨了,不知道应该把闹钟设定在哪个时刻,请你帮助他。(只考虑时和分,不考虑日期)

输入描述:

输入现在的时刻以及要睡的时长k(单位:minute),中间用空格分开。

输入格式:hour:minute k(如hour或minute的值为1,输入为1,而不是01)

(0 ≤ hour ≤ 23,0 ≤ minute ≤ 59,1 ≤ k ≤ 109)

输出描述:

对于每组输入,输出闹钟应该设定的时刻,输出格式为标准时刻表示法(即时和分都是由两位表示,位数不够用前导0补齐)。

示例1

输入

0:0 100

输出

01:40

示例2

输入

1:0 200

输出

04:20

参考代码:

#include 
int main()
{
    int h = 0;
    int m = 0;
    int k = 0;
    scanf("%d:%d %d", &h, &m, &k);
    h = ((m + k) / 60 + h) % 24;
    m = (m + k) % 60;
    printf("%02d:%02d\n", h, m);
    return 0;
}

答案解析:

4. BC114-小乐乐排电梯

题目描述

小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐到达楼上需要的时间。

示例1

输入

1

输出

2

示例2

输入

12

输出

6

参考代码:

#include 
int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", n / 12 * 4 + 2);

    return 0;
}

答案解析:

5. BC115-小乐乐与欧几里得

题目描述

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述:

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

输出描述:

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

示例1

输入

10 20

输出

30

示例2

输入

15 20

输出

65

参考代码:

#include 
//暴力求解:
//耗时太久,不满足条件
// int main()
// {
//     long long n = 0;
//     long long m = 0;
//     long long tmp = 0;

//     scanf("%lld %lld", &n, &m);
//     long long max = m > n ? n : m;//假设n和m的较小值为最大公约数
//     while (max)
//     {
//         if (m % max == 0 && n % max == 0)
//         {
//             break;
//         }
//         max--;
//     }
//     long long min = m > n ? m : n;//假设n和m的较大值为最小公倍数
//     while (min)
//     {
//         if (min % m == 0 && min % n == 0)
//         {
//             break;
//         }
//         min++;
//     }
//     printf("%lld\n", max + min);
//     return 0;
// }
//辗转相除法
int main()
{
    long long n = 0;
    long long m = 0;
    long long tmp = 0;

    scanf("%lld %lld", &n, &m);
    int a = n;
    int b = m;
    while (tmp = a % b)
    {
        a = b;
        b = tmp;
    }
    printf("%lld\n", b + m * n / b);
    return 0;
}

答案解析:

6. BC116-小乐乐改数字

题目描述

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

示例1

输入

222222

输出

0

示例2

输入

123

输出

101

参考代码:

#include 
#include 
int main()
{
    int n = 0;
    int ret = 0;
    scanf("%d", &n);
    int i = 0;
    while (n)
    {
        //计算每一位
        int w = n % 10;
        //判断奇偶数
        if (w % 2 == 1)
            w = 1;
        else
            w = 0;
        ret += w * pow(10, i);
        n /= 10;
        i++;
    }
    printf("%d", ret);
    return 0;
}

答案解析:

7. BC107-小乐乐走台阶

题目描述

小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

输入描述:

输入包含一个整数n (1 ≤ n ≤ 30)

输出描述:

输出一个整数,即小乐乐可以走的方法数。

示例1

输入

2

输出

2

示例2

输入

10

输出

89

参考代码:

#include 
int fib(int n)
{
    if (n <= 2)
        return n;
    else
        return fib(n - 1) + fib(n - 2);
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", fib(n));
    return 0;
}

答案解析:

扩展学习:https://www.jianshu.com/p/965d12083d7f

C语言刷题——lesson11_第1张图片

8. BC118-小乐乐和序列

题目描述

老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他。

输入描述:

第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)

输出描述:

输出一行,为去重排序后的序列,每个数后面有一个空格。

示例1

输入

4
2
2
1
1

输出

1 2 

示例2

输入

5
5
4
3
2
1

输出

1 2 3 4 5 

参考代码:

#include 
int main()
{
    int n = 0;
    int arr[100000] = { 0 };
    int i = 0;
    int tmp = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &tmp);
        arr[tmp] = tmp;
    }
    for (i = 0; i < 100000; i++)
    {
        if (arr[i] != 0)
            printf("%d ", arr[i]);
    }
    return 0;
}

答案解析:

9. BC119-小乐乐与字符串

题目描述

在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子序列“CHN”的个数。

子序列的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子序列。如“ABC”的子序列有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。

输入描述:

输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)

输出描述:

输出一个整数,为字符串s中子序列“CHN”的数量。

示例1

输入

CCHNCHN

输出

7

示例2

输入

CCHNCHNCHNCHN

输出

30

参考代码:

#include 
//
//这个题的难度在于理解题目的意思
//不是连续的子串
//只要在字符串中找到几个字符能组合成子串就算是“子串”
//
int main()
{
    char str[8000] = { 0 };
    int count = 0;
    scanf("%s", str);
    char* p = str;
    long long c = 0;
    long long ch = 0;
    long long chn = 0;
    while (*p)
    {
        if (*p == 'C')
            c++;
        else if (*p == 'H')
            ch += c;
        else if (*p == 'N')
            chn += ch;

        p++;
    }
    printf("%lld\n", chn);
    return 0;
}

答案解析:

  1. 这个题中的子串可以是不连续的

  2. ch的个数其实和前面出现的c的个数有关,chn的个数和n之前ch的个数有关。

10. BC123-小乐乐找最大数

题目描述

小乐乐获得4个最大数,请帮他编程找到最大的数。

输入描述:

一行,4个整数,用空格分开。

输出描述:

一行,一个整数,为输入的4个整数中最大的整数。

示例1

输入

5 8 2 5

输出

8

参考代码:

#include 
int main()
{
    int arr[4] = { 0 };
    int i = 0;
    for (i = 0; i < 4; i++)
    {
        scanf("%d", &arr[i]);
    }
    //假设
    int max = arr[0];
    for (i = 1; i < 4; i++)
    {
        if (arr[i] > max)
        {
            max = arr[i];
        }
    }
    printf("%d\n", max);
    return 0;
}

答案解析:

11. BC125-小乐乐转换成绩

题目描述

小乐乐输入百分制成绩,他想将成绩转换成等级制。转换规则为:90-100为’A’,80-89为’B’,70-79为’C’,60-69为’D’,59以下为’E’。如果输入的成绩不在0-100之间,输出’F’。

输入描述:

一行,一个整数表示的成绩。

输出描述:

一行,转换后的等级。

示例1

输入

78

输出

C

参考代码:

#include 
int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score < 0 || score>100)
        printf("F\n");
    else if (score >= 90 && score <= 100)
        printf("A\n");
    else if (score >= 80 && score <= 89)
        printf("B\n");
    else if (score >= 70 && score <= 79)
        printf("C\n");
    else if (score >= 60 && score <= 69)
        printf("D\n");
    else
        printf("E\n");
    return 0;
}

答案解析:

12. BC129-小乐乐计算函数

题目描述

小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。img

其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。

输入描述:

一行,输入三个整数,用空格隔开,分别表示a, b, c。

输出描述:

一行,一个浮点数,小数点保留2位,为计算后m的值。

示例1

输入

1 2 3

输出

0.30

参考代码:

#include 
int max3(int a, int b, int c) 
{
    int max = a;
    if (b > max)
        max = b;
    if (c > max)
        max = c;
    return max;
}
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("%d %d %d", &a, &b, &c);
    float m = ((float)max3(a + b, b, c) / (max3(a, b + c, c) + max3(a, b, b + c)));

    printf("%.2f\n", m);
    return 0;
}

答案解析:

你可能感兴趣的:(C语言刷题,c语言)