bupt2024大一上计导第一次机考

7-1 评优

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

某班正在评优,规则规定,一个班最多只能推荐2名同学。经过几轮评比后还有3位同学有资格。最后一轮的规则非常简单,就是比这三个同学的加权成绩。成绩好的2位同学可以获得推荐资格。现请你写一段程序,计算这两个成绩好的同学的加权成绩的平均值。

输入格式:

只有一行,为三个用空格分隔的正的浮点数,依次代表三个人的加权成绩。测试用例保证所有浮点数都可以用float存储,也建议用float存储。

输出格式:

也只有一行,为一个浮点数,代表成绩高的两名同学的平均成绩(保留一位小数)。

输入样例:

95.6 93.8 90.7

输出样例:

94.7

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    float a, b, c;
    scanf("%f %f %f", &a, &b, &c);

    float min, res;

    min = a<=b ? a : b;
    min = min<=c ? min : c;

    res = (a + b + c - min)/2;

    printf("%.1f", res);

    return 0;
}

7-2 二人争产问题

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

塔木德二人争产问题是指当两个人对同一财产有争议时,如何公平地分配该财产的问题。塔木德分配法的核心思想是“争大衣原则”,其中前两条原则为:一、只分配有争议的部分,无争议的部分可以直接获得;二、宣称拥有更多财产权利一方最终所得不少于宣称拥有较少权利一方。比如:债权人甲与乙分别要求获得的财产为 c1、 c2(不妨设 c1≤ c2),可供分配的总财产为 E(假设E<=c1+c2)。甲与乙分到的财产记为 x1、 x2。按照 R . Aumann 和 M . Maschler 论文中的分配方法:当 E 不大时(标准为 E ≤ c1)先两人平分;然后增长的部分只分给乙;一直到乙拿到一定份额时(标准为乙与甲的损失相同),总财产继续增长的部分由两人平分。比如,甲乙债权人的债权分别为100和200,当待分配财产为100时,二人各分得50;当待分配财产为180时,甲得50,乙得130;当待分配财产为240时,甲得70,乙得170。
请根据此算法写一段程序来计算甲乙二人分别应分得多少财产。

输入格式:

只有一行,为三个用空格分隔的整数,依次代表 c1、 c2和E。测试用例保证c1≤ c2,E<=c1+c2且所有整数均可以用int存储。

输出格式:

也只有一行,为用空格分隔的两个整数,依次代表x1和x2。

输入样例:

100 200 100

输出样例:

50 50

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    int E, c1,c2;
    scanf("%d %d %d", &c1, &c2, &E);
    int x1, x2;

    if(E<=c1){
        x1 = E/2;
        x2 = E/2;
    }else if(E<=c2){
        x2 = E - c1/2;
        x1 = c1/2;
    }else{
        E = E - c2;
        x2 = c2 - c1/2 + E/2;
        x1 = c1/2 + E/2;
    }
    printf("%d %d",x1,x2);

    return 0;
}

7-3 奇偶平均值

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

现有一个由n(1<n<100)个整数组成数列,这n个整数的绝对值都小于100。请你写一段程序分别求出这n个整数中奇数的平均值和偶数的平均值。

输入格式:

共两行,第一行为一个整数,代表n,第二行为n个用空格分隔的整数,代表待处理数列。测试用例保证合法。

输出格式:

只有一行,为两个一个空格分隔的浮点数,依次代表输入数列中所有奇数的平均值和所有偶数的平均值(保留1为小数,数据类型建议用float)。

输入样例:

10
1 2 3 4 5 6 7 8 9 10

输出样例:

5.0 6.0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    scanf("%d", &n);

    int arr[100];

    for(int i = 0; i<n; i++){
        scanf("%d", &arr[i]);
    }

    int sum_1 = 0, sum_2 = 0;
    int num_1 = 0, num_2 = 0;
    for(int i=0; i<n; i++){
        if(abs(arr[i])%2==1){
            sum_1+= arr[i];
            num_1++;
        }else{
            sum_2+= arr[i];
            num_2++;
        }
    } 

    float res_1=(float)sum_1/num_1;
    float res_2=(float)sum_2/num_2;

    printf("%.1f %.1f", res_1, res_2);

    return 0;
}

7-4 非字母数字计数

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

现有若干字符,包括大小写字母,数字,空格,其他字符等等。请按输入顺序输出其中的字母及数字以及其他被忽略的字符的个数。

输入格式:

只有一行,为一串任意字符,以’\n’结尾。

输出格式:

共两行,第一行为按输入顺序输出其中的字母和数字;第二行为一个整数,代表被忽略的非字母数字的个数。

测试用例保证输入合法。

输入样例:

gj&*(!@J@1231we../789)

输出样例:

gjJ1231we789
10

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    char ch;
    int count = 0;

    while((ch = getchar()) != '\n')
    {
        if((ch >= 'a'&&ch <= 'z')||(ch >= 'A'&&ch <= 'Z')||(ch >= '0'&&ch <= '9'))
            printf("%c", ch);
        else
            count++;
    }
    printf("\n%d\n", count);

    return 0;
}

7-5 打印图形五

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

用'-'(减号)、'+'(加号)、'*'星号和空格打印方格。

输入格式:

只有一行,为用空格分隔的两个整数l,c(0<l,c<10)。其中l和c分别代表格子的行数和列数。请看输入样例。

输出格式:

每组测试用例输出一组。请看输出样例。

输入样例一:

2 3

输出样例一:

*--+--*--+--*--+--*
*  *  *  *  *  *  *
*--+--*--+--*--+--*
*  *  *  *  *  *  *
*--+--*--+--*--+--*
*  *  *  *  *  *  *
*--+--*--+--*--+--*
*  *  *  *  *  *  *
*--+--*--+--*--+--*

输入样例二:

3 2

输出样例二:

*--+--*--+--*
*  *  *  *  *
*--+--*--+--*
*  *  *  *  *
*--+--*--+--*
*  *  *  *  *
*--+--*--+--*
*  *  *  *  *
*--+--*--+--*
*  *  *  *  *
*--+--*--+--*
*  *  *  *  *
*--+--*--+--*

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

void zero_two_end(int n, int m)
{
    printf("*--+--");
    if(n == m - 1)
        printf("*\n");
}

void one_three(int n, int m)
{
    printf("*  *  ");
    if(n == m - 1)
        printf("*\n");
}

int main()
{
    int i, j;
    scanf("%d %d", &i, &j);

    for(int a = 0; a < 4*i + 1; a++)
    {
        for(int b = 0; b < j; b++)
        {
        if(a%4 == 0||a%4 == 2||a == 4*i)
            zero_two_end(b, j);
        if(a%4 == 1|| a%4 == 3)
            one_three(b, j);
        }
    }

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值