2025级C语言第二次周测题解

7-1 A乘以B

分数 30

作者 陈越

单位 浙江大学

看我没骗你吧 —— 这是一道你可以在10秒内完成的题:给定两个绝对值不超过100的整数A和B,输出A乘以B的值。

输入格式:

输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出A乘以B的值。

输入样例:

-8 13

输出样例:

-104

参考答案:

#include <stdio.h>
int main (void) {
    int A, B;
    scanf("%d %d", &A, &B);
    printf("%d", A*B);
    return 0;
}

7-2 新胖子公式

分数 20

作者 陈越

单位 浙江大学

根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。

输入格式:

输入在一行中给出两个正数,依次为一个人的体重(以 kg 为单位)和身高(以 m 为单位),其间以空格分隔。其中体重不超过 1000 kg,身高不超过 3.0 m。

输出格式:

首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后 1 位。如果这个数值大于 25,就在第二行输出 PANG,否则输出 Hai Xing

输入样例 1:

100.1 1.74

输出样例 1:

33.1
PANG

输入样例 2:

65 1.70

输出样例 2:

22.5
Hai Xing

参考答案:

#include <stdio.h>
int main (void) {
    double weight, height;
    scanf("%lf %lf", &weight, &height);
    double flag = weight / (height * height);
    printf("%.1lf\n", flag);
    if(flag > 25){
        printf("PANG");
    }else{
        printf("Hai Xing");
    }
    return 0;
}

7-3 整数的分类处理

分数 20

作者 陈越

单位 浙江大学

给定 N 个正整数,要求你从中得到下列三种计算结果:

  • A1 = 能被 3 整除的最大整数

  • A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数

  • A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:

输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。

输出格式:

在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE

输入样例 1:

8
5 8 7 6 9 1 3 10

输出样例 1:

9 3 6.5

输入样例 2:

8
15 18 7 6 9 1 3 10

输出样例 2:

18 3 NONE

参考答案:

#include <stdio.h>
int main (void) {
    int n;
    scanf("%d", &n);
    int A1, A2, A3, A3_count;
    (A1 = -1), (A2 = A3 = A3_count = 0);
    for(int i=0; i<n; i++){
        int number;
        scanf("%d", &number);
        if(number % 3 == 0){
            A1 = A1 > number ? A1 : number;
        }else if((number - 1) % 3 == 0){
            A2 ++;
        }else if((number - 2) % 3 == 0){
            A3 += number;
            A3_count ++;
        }
    }
    if(A1 != -1){
        printf("%d ", A1);
    }else{
        printf("NONE ");
    }
    if(A2 != 0){
        printf("%d ", A2);
    }else{
        printf("NONE ");
    }
    if(A3 != 0){
        printf("%.1lf", (double)A3 / A3_count);
    }else{
        printf("NONE");
    }
    return 0;
}

7-4 寻找250

分数 20

作者 陈越

单位 浙江大学

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:

888 666 123 -233 250 13 250 -222

输出样例:

5

参考答案:

#include <stdio.h>
int main (void) {
    int number, count = 1;
    while(scanf("%d", &number)){
        if(number == 250){
            printf("%d", count);
            break;
        }else{
            count ++;
        }
    }
    return 0;
}

7-5 抓老鼠啊~亏了还是赚了?

分数 10

作者 周强

单位 青岛大学

某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C),或者什么也不放(X)。捕鼠夹可重复利用,不计成本,奶酪每块3元。

聪明的老鼠呢?它们每天可能会派出一只老鼠到墙角,看看墙角有啥:

  • 若什么也没有(X),老鼠们就不高兴了(Unhappy),会有长达一天(也就是第二天)的不高兴期。在不高兴期间,不派出老鼠。不高兴期结束之后,派出老鼠。

  • 若有捕鼠夹(T),这只老鼠被引诱吃掉奶酪并被打死(Dead),老鼠们会有长达两天(也就是第二和第三天)的伤心期。在伤心期间,不派出老鼠。伤心期结束之后,派出老鼠。在这种情况下,抓到1只老鼠可获得奖励10元,但同时也耗费了一块奶酪。注意,如果某一天放置了捕鼠夹但老鼠没有出现,则没有耗费奶酪。

  • 若有奶酪(C),老鼠吃了奶酪会很开心(Happy!),会有长达两天(第二和第三天)的兴奋期。在兴奋期间,即使叠加了不高兴或者伤心,也必定派出老鼠。在这种情况下,没抓到老鼠,而且耗费了一块奶酪。注意,如果某一天放置了奶酪但老鼠没有出现,则奶酪可以下次再用,没有耗费。

现在给你连续几天的操作序列,且已知第一天肯定会派出老鼠,请判断老鼠每天的状态,并计算盈利。

输入格式:

输入在一行中给出连续的由CTX组成的不超过70个字符的字符串,以$结束。字符串中每个字符表示这一天的操作( 即X:什么都不放;T:放捕鼠夹;C:放奶酪)。题目保证至少有一天的操作输入。

输出格式:

要求在第一行输出连续的字符串,与输入相对应,给出老鼠的状态:

  • ! 表示派出老鼠吃到奶酪

  • D 表示派出老鼠被打死

  • U 表示派出老鼠无所获

  • - 表示没有派出老鼠

第二行则应输出一个整数表示盈利。(如果有亏损,则是负数)

输入样例1:

TXXXXC$

输出样例1:

D--U-! 
4

输入样例2:

CTTCCX$

输出样例2:

!DD--U 
11

参考答案:

#include <stdio.h>
int main (void) {
    char str[100], out[100];
    int index, money, sad, happy;
    index = money = sad = happy = 0;
    gets(str);
    for(int i=0; i<strlen(str) && str[i] != '$'; i++){
        int flag =0;
        if(happy != 0){
            happy --;
            flag = 1;
        }else if(sad != 0){
            sad --;
            flag = 0;
        }else{
            flag = 1;
        }

        if(flag){
            if(str[i] == 'X'){
                sad = 1;
                out[index++] = 'U';
            }else if(str[i] == 'T'){
                sad = 2;
                out[index++] = 'D';
                money += 7;
            }else if(str[i] == 'C'){
                happy = 2;
                out[index++] = '!';
                money -= 3;
            }
        }else{
            out[index++] = '-';
        }
    }
    out[index] = '\0';
    puts(out);
    printf("%d", money);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值