【C语言】在线OJ题 BC122-BC139-牛客网编程初学者入门训练


BC122 小乐乐算平均分

描述
小乐乐输入三科成绩,请编程帮他输出三科成绩总分及平均分。
输入描述:
一行,3科成绩(浮点数),成绩之间用一个空格隔开。
输出描述:
一行,总分和平均分(小数点后保留两位),用一个空格隔开。
示例1
输入:
79.5 80.0 98.0
输出:
257.50 85.83

题目链接

#include <stdio.h>

int main()
{
    float a,b,c;
    scanf("%f %f %f", &a, &b, &c);
    printf("%.2f %.2f", a+b+c, (a+b+c)/3);
    
    return 0;
}

BC123 小乐乐找最大数

描述
小乐乐获得4个最大数,请帮他编程找到最大的数。
输入描述:
一行,4个整数,用空格分开。
输出描述:
一行,一个整数,为输入的4个整数中最大的整数。
示例1
输入:
5 8 2 5
输出:
8

题目链接

#include <stdio.h>

int main()
{
    int a = 0;
    int max = 0;
    int i = 0;
    for(i=0; i<4; i++)
    {
        scanf("%d", &a);
        if(max < a)
        {
            max = a;
        }
    }
    printf("%d\n", max);
    
    return 0;
}

BC124 小乐乐是否被叫家长

描述
小乐乐的班级进行了一次期中考试,考试一共有3门科目:数学,语文,英语,小乐乐的班主任决定给没有通过考核的同学家长开一次家长会,考核的标准是三科平均分不低于60分,所以现在想请你帮忙算一算小乐乐会不会被叫家长。
输入描述:
一行,输入三个整数(表示小乐乐的数学、语文、英语的成绩),用空格分隔。
输出描述:
一行,如果小乐乐会被请家长则输出“YES”,否则输出“NO”。
示例1
输入:
80 60 50
输出:
NO
示例2
输入:
70 55 40
输出:
YES

题目链接

#include <stdio.h>

int main()
{
    int m,c,e,avg;
    scanf("%d %d %d", &m, &c, &e);
    avg = (m + c + e ) / 3;
    if(avg >= 60)
    {
        printf("NO\n");
    }
    else
    {
        printf("YES\n");
    }
    
    return 0;
}

BC125 小乐乐转换成绩

描述
小乐乐输入百分制成绩,他想将成绩转换成等级制。转换规则为:90-100为’A’,80-89为’B’,70-79为’C’,60-69为’D’,59以下为’E’。如果输入的成绩不在0-100之间,输出’F’。
输入描述:
一行,一个整数表示的成绩。
输出描述:
一行,转换后的等级。
示例1
输入:
78
输出:
C

题目链接

#include <stdio.h>

int main()
{
    int score = 0;
    char level = 0;
    
    scanf("%d", &score);
    
    if(score >= 90 && score <=100)
    {
        level = 'A';
    }
    else if(score >= 80 && score <=89)
    {
        level = 'B';
    }
    else if(score >= 70 && score <=79)
    {
        level = 'C';
    }
    else if(score >= 60 && score <=69)
    {
        level = 'D';
    }
    else if(score >=0 && score <=59)
    {
        level = 'E';
    }
    else
    {
        level = 'F';
    }
    
    printf("%c", level);
}

BC126 小乐乐算多少人被请家长

描述
小乐乐的班主任想统计一下班级里一共有多少人需要被请家长,三个成绩(语文,数学,外语)平均分低于60的将被请家长,小乐乐想编程帮助班主任算一下有多少同学被叫家长。

输入描述:
共n+1行
第一行,输入一个数n,代表小乐乐的班级中有n个同学。
在接下来的n行中每行输入三个整数代表班级中一个同学的三科成绩(语文,数学,外语),用空格分隔。
输出描述:
一行,一个整数,代表班级中需要被请家长的人数。
示例1
输入:
3
80 100 90
40 70 65
20 84 93
输出:
1

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    int arr[100] = {0};
    scanf("%d", &n);
    int i = 0;
    for(i=0; i<n*3; i++)
    {
        scanf("%d", &arr[i]);
    }
    int avg = 0;
    int count = 0;
    for(i=0; i<n*3; i+=3)
    {
        avg = (arr[i]+arr[i+1]+arr[i+2]) / 3;
        if(avg < 60)
        {
            count++;
        }
    }
    printf("%d\n", count);
    
    return 0;
}

BC127 小乐乐算最高分

描述
小乐乐的老师BoBo想知道班级中谁的数学成绩最高,请编程帮他实现。
输入描述:
共n+1行
第一行输入一个数n,代表小乐乐的班级中n个同学。
第二行输入n个数,用空格相隔,代表班级中每个人的数学成绩。
输出描述:
一个整数,代表班级中最高的数学成绩。
示例1
输入:
3
99 89 39
输出:
99

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    int i = 0;
    int max = 0;
    int arr[100] = {0};
    scanf("%d", &n);
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
        max = max>arr[i]?max:arr[i];
    }
    printf("%d\n", max);
    
    return 0;
}

BC128 小乐乐计算求和

描述
小乐乐想计算一下1!+2!+3!+…+n!。
输入描述:
一行,一个整数n。
输出描述:
一行,一个整数,表示1!+2!+3!+…+n!的结果。
示例1
输入:
3
输出:
9

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int a = 1;
    int sum = 0;
    for(i=1; i<=n; i++)
    {
        a *= i;
        sum += a;
    }
    printf("%d\n", sum);
    
    return 0;
}

BC129 小乐乐计算函数

描述
小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。
在这里插入图片描述
其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。
输入描述:
一行,输入三个整数,用空格隔开,分别表示a, b, c。
输出描述:
一行,一个浮点数,小数点保留2位,为计算后m的值。
示例1
输入:
1 2 3
输出:
0.30

题目链接

#include <stdio.h>

int max3(int a, int b, int c)
{
    int max = a>b?a:b;
    max = max>c?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;
}

/*
float max3(int a, int b, int c)
{
    float max = a;
    if(max < b)
    {
        max = b;
    }
    if(max < c)
    {
        max = c;
    }
    return max;
}

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("%d %d %d", &a, &b, &c);
    
    float m = max3(a+b, b, c) / (max3(a, b+c, c) + max3(a, b, b+c));
    printf("%.2f\n", m);
    
    return 0;
}
*/

BC130 小乐乐查找数字

描述
给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。
输入描述:
共3行
第一行,一个整数,表示n(1 <= n <= 100)。
第二行,共输入n个整数,两个整数之间用空格分隔。
第三行,输入一个整数,表示要查找的整数x。
输出描述:
一行,表示整数x出现的次数。
示例1
输入:
5
1 1 2 1 3
1
输出:
3

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    int arr[100] = {0};
    // 输入n
    scanf("%d", &n);
    // 输入n个整数
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    // 输入x
    int x = 0;
    scanf("%d", &x);
    
    // 查找x
    int count = 0;
    for(i=0; i<n; i++)
    {
        if(x == arr[i])
        {
            count++;
        }
    }
    
    printf("%d", count);
    
    return 0;
}

BC131 KiKi学程序设计基础

描述
BoBo老师教了KiKi学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KiKi学习了C和C++,学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KiKi输出C和C++输出Hello world的代码。

输入描述:

输出描述:
printf(“Hello world!\n”);
cout << “Hello world!” << endl;

题目链接

#include <stdio.h>

int main()
{   
    printf("printf(\"Hello world!\\n\");\n");
    printf("cout << \"Hello world!\" << endl;\n");
    
    return 0;
}

BC132 KiKi算期末成绩

描述
KiKi这学期努力学习程序设计基础,要期末考试了,BoBo老师告诉他,总成绩包括四个部分,如下:
总成绩 = 实验成绩 * 20% + 课堂表现成绩 * 10% + 过程考核成绩 * 20% + 期末上机考试成绩 * 50%,现在输入KiKi的各项成绩,请计算KiKi的总成绩。
输入描述:
一行,包括四个整数(百分制),用空格分隔,分别表示实验成绩,课堂表现成绩,过程考核成绩,期末上机考试成绩。
输出描述:
一行,总成绩,保留小数点一位。
示例1
输入:
100 100 90 80
输出:
88.0

题目链接

#include <stdio.h>

int main()
{
    int a,b,c,d;
    float s = 0.0;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    s = a*0.2 + b*0.1 + c*0.2 + d*0.5;
    printf("%.1f", s);
    
    return 0;
}

BC133 KiKi说祝福语

描述
2020年来到了,KiKi要对他的n位好朋友说n遍”Happy new year!Good luck!”的祝福语。

输入描述:
输入只有一行,其中含有一个正整数 n(1≤n≤20),代表KiKi说祝福话的遍数。

输出描述:
输出 n行"Happy new year!Good luck!"。

示例1
输入:
2
输出:
Happy new year!Good luck!
Happy new year!Good luck!

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    while(n--)
    {
        printf("Happy new year!Good luck!\n");
    }
    
    return 0;
}

BC134 KiKi的最高分

描述
KiKi知道了大一三科比较重要课程的分数,包括:程序设计基础,高数,英语,请编程帮他找到三科中的最高分。
输入描述:
一行,三个整数,用空格分隔,代表三科成绩。
输出描述:
一行,一个整数,代表输入三科分数中的最高分数。
示例1
输入:
90 88 99
输出:
99

题目链接

/* #include <stdio.h>

int main()
{
    int p,m,e,max;
    
    scanf("%d %d %d", &p, &m, &e);
    if(max < p)
    {
        max = p;
    }
    if(max < m)
    {
        max = m;
    }
    if(max < e)
    {
        max = e;
    }
    printf("%d\n", max);
    
    return 0;
} */

#include <stdio.h>

int main()
{
    int num1 = 0;
    int num2 = 0;
    int num3 = 0;
    scanf("%d %d %d", &num1, &num2, &num3);

    int max = 0;
    max = num1 > num2 ? num1 : num2;
    max = max > num3 ? max : num3;

    printf("%d", max);

    return 0;
}

BC135 KiKi求质数个数

描述
KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。
输入描述:

输出描述:
一行,一个整数,表示所有三位整数中,有多少个质数。

题目链接

#include <stdio.h>
/*
int main()
{
    int i = 0;
    int count = 0;
    for(i=100; i<1000; i++)
    {
        int j = 0;
        for(j=2; j<i; j++)
        {
            if(i%j == 0)
            {
                break;
            }
        }
        if(i == j)
        {
            count++;
        }
    }
    printf("%d\n", count);
    
    return 0;
}
*/

int is_prime(int n)
{
    int j = 0;
    for(j=2; j<=n-1; j++)
    {
        if(n%j == 0)
        {
            return 0;
        }
    }
    return 1;
}

int main()
{
    int i = 0;
    int count = 0;
    for(i=100; i<=999; i++)
    {
        if(is_prime(i) == 1)
        {
            count++;
        }
    }
    printf("%d\n", count);
    
    return 0;
}

BC136 KiKi去重整数并排序

描述
给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到达排序输出。
输入描述:
第一行,输入一个整数n,表示序列有n个整数。
第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。
输出描述:
去重并且从小到大排列的整数序列,整数之间用空格分隔。
示例1
输入:
6
5 3 3 4 2 2
输出:
2 3 4 5

题目链接

#include <stdio.h>
/* 暴力求解
int main()
{
    int n = 0;
    int arr[1000] = {0};
    scanf("%d", &n);
    //接收n个数字
    int i = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //处理
    //1. 排序(冒泡排序)
    for(i=0; i<n-1; i++) //趟数 假设10个元素9趟
    {
        int j = 0;
        for(j=0; j<n-1-i; j++)
        {
            if(arr[j] > arr[j+1])
            {
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    //2. 去重
    //去重比较的对数n-1
    for(i=0; i<n-1; i++)
    {
        if(arr[i] == arr[i+1])
        {
            //把从i+1下标往后的元素全部往前覆盖
            int k = 0;
            for(k=i; k<n-1; k++) //n-1最大n-2个元素 +1是n-1 就是最后
            {
                arr[k] = arr[k+1];
            }
            n--;
            i--;
        }
    }
    //3. 打印
    for(i=0; i<n; i++)
    {
        printf("%d ", arr[i]);
    }
    
    return 0;
}
*/

//每个整数大于等于1,小于等于1000
int main()
{
    int n = 0;
    int arr[1001] = {0}; //下标1000
    scanf("%d", &n);
    int i = 0;
    int m = 0;
    for(i=0; i<n; i++)
    {
        scanf("%d", &m);
        arr[m] = m;
    }
    for(i=0; i<=1000; i++) //遍历所有元素 而不是n个
    {
        if(arr[i] != 0)
        {
            printf("%d ", arr[i]);
        }
    }
    
    return 0;
}

BC137 KiKi判断上三角矩阵

描述
KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述:
第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)

从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:
一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

示例1
输入:
3
1 2 3
0 4 5
0 0 6
输出:
YES
示例2
输入:
4
1 2 3 4
5 6 7 8
9 0 11 12
13 0 0 16
输出:
NO

题目链接

#include <stdio.h>

int main()
{
    int n = 0;
    int arr[10][10] = {0};
    scanf("%d", &n);
    int i = 0;
    int j = 0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            if(i>j)
            {
                if(arr[i][j] != 0)
                {
                    printf("NO\n");
                    return 0;
                }
            }
        }
    }
    printf("YES\n");
    
    return 0;
}

/*
int main()
{
    int n = 0;
    int arr[10][10] = {0};
    scanf("%d", &n);
    int i = 0;
    int j = 0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            scanf("%d", &arr[i][j]);
            if(i>j)
            {
                if(arr[i][j] != 0)
                {
                    printf("NO\n");
                    return 0;
                }
            }
        }
    }
    printf("YES\n");
    
    return 0;
}
*/

BC138 KiKi学结构体和指针

描述
KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。

输入描述:
包括三行:
第一行输入数据个数n (3≤n≤100);
第二行依次输入n个整数,用空格分隔;

第三行输入欲删除数据m。

输出描述:
包括两行:
第一行输出完成删除后的单链表长度;

第二行依次输出完成删除后的单链表数据。

示例1
输入:
5
1 2 2 3 4
2
输出:
3
1 3 4

题目链接

#include <stdio.h>

//链表结点的定义
struct Node
{
    int date; //数据域
    struct Node* next; //指针域
};

int main()
{
    struct Node* list = NULL; //指向链表的指针
    struct Node* tail = NULL; //指向链表尾部元素的指针
    //输入n
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int m = 0;
    int d = 0; //要删除的元素
    
    //接收n个数字并尾插到链表中
    for(i=0; i<n; i++)
    {
        scanf("%d", &m);
        struct Node* pn = (struct Node*)malloc(sizeof(struct Node));
        pn->date = m;
        pn->next = NULL;
        
        //插入第一个元素
        if(list == NULL)
        {
            list = pn;
            tail = pn;
        }
        else
        {
            tail->next = pn;
            tail = pn;
        }
    }
        //接收要删除的元素
        scanf("%d", &d);
        
        //删除链表中指定的元素
        struct Node* cur = list;
        struct Node* prev = NULL;
        
        while(cur)
        {
            //找到了要删除的元素
            if(cur->date == d)
            {
                //删除
                //删除的如果是第一个结点
                struct Node* pd = cur;
                if(cur == list)
                {
                    list = list->next;
                    cur = list;
                }
                else
                {
                    prev->next = cur->next;
                    cur = prev->next;
                }
                free(pd);
                n--;
            }
            else
            {
                prev = cur;
                cur = cur->next;
            }
        }
        
        //输出
        printf("%d\n", n);
        cur = list;
        while(cur)
        {
            printf("%d ", cur->date);
            cur = cur->next;
        }
        //释放链表
        cur = list;
        struct Node* del = NULL;
        while(cur)
        {
            del = cur;
            cur = cur->next;
            free(del);
        }
        list = NULL;
    
    return 0;
}

BC139 KiKi定义电子日历类

描述
KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。
它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:
(1)带有默认形参值的构造函数,默认值为0, 0, 0;
(2)输出日期函数,用“日/月/年”格式输出日期;
(3)设置日期函数,从键盘输入年、月、日。
输入描述:
一行,三个整数,用空格分隔,分别表示年、月、日。
输出描述:
一行,用“日/月/年”格式输出日期。
示例1
输入:
2019 12 30
复制
输出:
30/12/2019

题目链接

#include <iostream>
using namespace std;

class TDate
{
private:
    int Year;
    int Month;
    int Day;
public:
    TDate(int y=0, int m=0, int d=0)
    {
        Year = y;
        Month = m;
        Day = d;
    }
    void print()
    {
        cout<<Day<<'/'<<Month<<'/'<<Year<<endl;
    }
};

int main()
{
    int year = 0;
    int month = 0;
    int day = 0;
    //输入
    cin>>year>>month>>day;
    TDate d(year, month, day);
    //输出
    d.print();
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三春去后诸芳尽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值