全部版块 我的主页
论坛 数据科学与人工智能 IT基础 C与C++编程
436 0
2025-12-04

R6-1 实现函数查找整型数组中的最大元素

本题目标是设计一个函数,用于确定整型数组内的最大数值。

int FindArrayMax( int a[], int n );

参数说明:

  • a
    表示由调用者传入的整数数组;
  • n
    是该数组中实际包含的元素数量。

函数应返回数组

a
中的最大值。

测试程序框架如下:

#include <stdio.h>
#define MAXN 10

int FindArrayMax( int a[], int n );

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

    printf("%d\n", FindArrayMax(a, n));
   
    return 0;
}

/* 请在这里填写答案 */

输入示例:

4
20 78 99 -14

输出示例:

99

参考实现方案:

int FindArrayMax( int a[], int n ){
    int max = a[0];
    for(int i = 1; i < n; i++){
        max = max > a[i] ? max : a[i];
    }
    return max;
}

R6-2 确定自定义类型集合中的最大元素

要求完成一个函数,能够从给定的 n 个自定义类型 Element 的数据中找出最大值。

ElementType Max( ElementType S[], int N );

其中,数组

S[]
存放所有待比较的元素,正整数
N
表示元素总数。函数需返回这些元素中的最大值,且结果仍为
ElementType
类型。

裁判端测试代码样例:

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Max( ElementType S[], int N );

int main ()
{
    ElementType S[MAXN];
    int N, i;

    scanf("%d", &N);
    for ( i=0; i<N; i++ )
        scanf("%f", &S[i]);
    printf("%.2f\n", Max(S, N));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

3
12.3 34 -5

输出样例:

34.00

参考解答:

ElementType Max( ElementType S[], int N ){
    ElementType max = S[0];
    for(int i = 1; i < N; i++){
        max = max > S[i] ? max : S[i];
    }
    return max;
}

R7-1 计算连续整数区间之和

题目描述:给定两个整数 A 和 B,依次输出从 A 到 B(含)之间的所有整数,并统计它们的总和。

输入格式:
一行内输入两个整数 A 和 B,满足 ?100 ≤ A ≤ B ≤ 100,以空格分隔。

输出格式:
按顺序输出 A 到 B 的每个整数,每行最多显示5个数字,每个数字占5个字符宽度,右对齐。最后单独一行以

Sum = X
的形式输出总和
X

输入示例:

-3 8

输出示例:

-3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

参考解法:

#include <stdio.h>
int main (void) {
    int A, B, sum = 0, count = 0;
    scanf("%d %d", &A, &B);
    for(int i = A; i <= B; i++){
        printf("%5d", i);
        sum += i;
        if(++count % 5 == 0){
            printf("\n");
        }
    }
    if(count % 5 != 0){
        printf("\n");
    }
    printf("Sum = %d", sum);
    return 0;
}

R7-2 阶乘累加运算

任务是对给定的正整数 N,计算 S = 1! + 2! + 3! + … + N! 的值。

输入格式:
输入一个不超过10的正整数 N。

输出格式:
输出 S 的最终结果。

输入样例:

3

输出样例:

9

参考答案:

#include <stdio.h>
int function(int n){
    int out = 1;
    for(int i = 1; i <= n; i++){
        out *= i;
    }
    return out;
}
int main (void) {
    int N, sum = 0;
    scanf("%d", &N);
    for(int i = 1; i <= N; i++){
        sum += function(i);
    }
    printf("%d", sum);
    return 0;
}

R7-3 求 1 到 n 平方和与 1 到 n 自然数和的总和

给定正整数 n,编写程序求表达式 (1 + 2 + … + n) + (1 + 2 + … + n) 的值。

输入格式:
输入一个正整数 n(n ≤ 100)。

输出格式:
输出所求表达式的计算结果。

输入示例:

5

输出示例:

340

参考实现:

#include <stdio.h>
int main (void) {
    int n, sum = 0;
    scanf("%d", &n);
    for(int i = 1; i <= n*n; i++){
        if(i <= n){
            sum += i;
        }
        sum += i;
    }
    printf("%d", sum);
    return 0;
}

R7-4 出租车费用计算程序

根据某城市普通出租车计费规则,编写程序计算乘客应付金额。具体规则如下:

  • 起步距离为3公里,费用为10元;
  • 超出3公里但不超过10公里的部分,每公里收费2元;
  • 超过10公里后,额外部分每公里收取3元(含50%回空补贴);
  • 行驶过程中因拥堵或乘客要求临时停车的,每满5分钟收取2元,不足5分钟不计费。

输入格式:
在一行中输入行驶里程(单位:公里,保留一位小数)和等待时间(单位:分钟,整数),两者以空格分隔。

输出格式:
输出应支付的总车费(单位:元),结果四舍五入至整数。

输入样例1:

2.6 2

输出样例1:

10

输入样例2:

5.1 4

输出样例2:

14

输入样例3:

12.5 9

输出样例3:

34

参考解答:

#include <stdio.h>
int main (void) {
    double distance, time, money = 0;
    scanf("%lf %lf", &distance, &time);
    if(distance <= 3){
        money = 10;
    }else if(distance <= 10){
        money = 10 + (distance - 3) * 2;
    }else{
        money = 10 + (10 - 3) * 2 + (distance - 10) * 3;
    }
    money += (int)time / 5 * 2;
    printf("%.0lf", money);
    return 0;
}

R7-5 工资所得税计算模型

设定个人所得税计算公式为:税率 × (工资 ? 1600),请根据以下分级税率表编程计算应缴税额:

  • 工资 ≤ 1600:税率为 0;
  • 1600 < 工资 ≤ 2500:税率为 5%;
  • 2500 < 工资 ≤ 3500:税率为 10%;
  • 3500 < 工资 ≤ 4500:税率为 15%;
  • 工资 > 4500:税率为 20%。

输入格式:
输入非负实数表示工资金额。

输出格式:
输出应缴纳的税款,精确到小数点后两位。

输入示例1:

1600

输出示例1:

0.00

输入示例2:

1601

输出示例2:

0.05

输入示例3:

3000

输出示例3:

140.00

输入示例4:

4000

输出示例4:

360.00

输入示例5:

5000

输出示例5:

680.00

参考代码:

#include <stdio.h>
int main (void) {
    double money, ans = 0;
    scanf("%lf", &money);
    if(money <= 1600){
        ans = 0;
    }else if(money <= 2500){
        ans = (money - 1600) * 0.05;
    }else if(money <= 3500){
        ans = (money - 1600) * 0.1;
    }else if(money <= 4500){
        ans = (money - 1600) * 0.15;
    }else{
        ans = (money - 1600) * 0.2;
    }
    printf("%.2lf", ans);
    return 0;
}

R7-6 “三天打鱼两天晒网”状态判断

中国有句俗语“三天打鱼两天晒网”。假设某人从第一天开始遵循此规律,即连续三天打鱼,接着两天晒网,循环往复。现给出第 N 天,判断这一天他是处于“打鱼”还是“晒网”状态。

输入格式:
输入一个不超过1000的正整数 N。

输出格式:
输出当天的状态:“Fishing” 或 “Drying”,并附加显示 “in day N”。

输入样例1:

103

输出样例1:

Fishing in day 103

输入样例2:

34

输出样例2:

Drying in day 34

参考实现:

#include <stdio.h>
int main (void) {
    int n;
    scanf("%d", &n);
    int flag = n % 5;
    if(flag <= 3 && flag != 0){
        printf("Fishing in day %d", n);
    }else{
        printf("Drying in day %d", n);
    }
    return 0;
}

R7-10 谷歌的招聘

分数:15

出题人:陈越

所属单位:浙江大学

2004年7月,谷歌公司在硅谷101公路旁设置了一块大型广告牌,用于人才招募。广告内容极为简洁——仅包含一个以.com结尾的网址,而该网址前缀是一个10位素数,此数为自然常数e中首次出现的连续10位数字。成功识别该素数者,可通过访问对应网站进入后续招聘环节。

自然常数e是一个著名的超越数,其前若干位如下所示:

e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921...

其中粗体部分即为所求答案。

本题要求解决一个更普遍的情况:给定一个长度为L的数字串,找出其中最早出现的由K位连续数字组成的素数。

输入格式:

首行输入两个正整数L和K,其中L表示数字串长度(不超过1000),K表示需查找的连续位数(小于10)。

第二行为一个长度为L的正整数N。

输出格式:

输出N中最早出现的K位连续数字构成的素数。若不存在符合条件的素数,则输出:

404

注意:原始数字中的前导零也计入位数。例如,在“200236”中查找4位素数时,“0023”是合法结果;但不能将第一个‘2’视为“0002”输出,因为原数中并不存在该数字之前的三个前导零。

输入样例1:

20 5
23654987725541023819

输出样例1:

49877

输入样例2:

10 3
2468001680

输出样例2:

404

参考答案:

#include <stdio.h>

int IsPrime(int n){
    if(n < 2){
        return 0;
    }else{
        for(int i = 2; i*i <= n; i++){
            if(n % i == 0){
                return 0;
            }
        }
        return 1;
    }
}

int main (void) {
    int L, K;
    scanf("%d %d", &L, &K);
    getchar();
    char str[1005];
    gets(str);
    int len = strlen(str);
    for(int i = 0; i <= len - K; i++){
        int number = 0;
        for(int j = i; j < i+K; j++){
            number = number * 10 + (str[j] - '0');
        }
        if(IsPrime(number)){
            for (int j = i; j < i + K; j++) {
                printf("%c", str[j]);
            }
            return 0;
        }
    }
    printf("404");
    return 0;
}

R7-7 超速判断

分数:20

出题人:杨起帆

所属单位:浙大城市学院

模拟交通警察使用的雷达测速设备。当输入车辆行驶速度后,若超过60 mph,则显示“Speeding”,否则显示“OK”。

输入格式:

一行内给出一个不超过500的非负整数,代表雷达检测到的车速。

输出格式:

在一行中输出测速仪的显示结果,格式如下:

Speed: V - S

其中

V

表示实际车速,

S

Speeding

OK

为对应状态标识。

输入样例1:

40

输出样例1:

Speed: 40 - OK

输入样例2:

75

输出样例2:

Speed: 75 - Speeding

参考答案:

#include <stdio.h>
int main (void) {
    int speed;
    scanf("%d", &speed);
    if(speed <= 60){
        printf("Speed: %d - OK", speed);
    }else{
        printf("Speed: %d - Speeding", speed);
    }
    return 0;
}

R7-8 求n以内最大的k个素数以及它们的和

分数:15

出题人:林颖贤

所属单位:集美大学

本题要求计算并输出不超过n的最大k个素数,并统计其总和。

输入格式:

在一行中输入两个数值n(范围为10 ≤ n ≤ 10000)与k(范围为1 ≤ k ≤ 10)。

输出格式:

按以下格式在同一行输出结果:

素数1+素数2+…+素数k=总和值

素数需按照从大到小顺序排列。若n范围内素数数量不足k个,则按实际数量输出。

输入样例1:

1000 10

输出样例1:

997+991+983+977+971+967+953+947+941+937=9664

输入样例2:

12 6

输出样例2:

11+7+5+3+2=28

参考答案:

#include <stdio.h>

int IsPrime(int n){
    if(n < 2){
        return 0;
    }else{
        for(int i = 2; i*i <= n; i++){
            if(n % i == 0){
                return 0;
            }
        }
        return 1;
    }
}

int main (void) {
    int n, k, sum = 0, flag = 1;
    scanf("%d %d", &n, &k);
    for(int i = n; k > 0 && i >= 2; i--){
        if(IsPrime(i)){
            if(!flag){
                printf("+");
            }
            printf("%d", i);
            sum += i;
            k--;
            flag = 0;
        }
    }
    printf("=%d", sum);
    return 0;
}

R7-9 小于m的最大的10个素数

分数:15

出题人:王淑琴

所属单位:天津师范大学

给定一个整数m(满足50 < m < 20000),找出小于m的最大的10个素数。

输入格式:

一行输入一个满足条件的正整数m。

输出格式:

在一行中按递减顺序输出这10个素数,每个素数占6列宽度。不得添加任何额外字符或格式。

输入样例:

229

输出样例:

227   223   211   199   197   193   191   181   179   173

参考答案:

#include <stdio.h>

int IsPrime(int n){
    if(n < 2){
        return 0;
    }else{
        for(int i = 2; i*i <= n; i++){
            if(n % i == 0){
                return 0;
            }
        }
        return 1;
    }
}

int main (void) {
    int m, count = 0;
    scanf("%d", &m);
    for(int i = m-1; count < 10; i--){
        if(IsPrime(i)){
            printf("%6d", i);
            count++;
        }
    }
    return 0;
}

34

Drying in day 34

#include <stdio.h>
int main (void) {
    int n;
    scanf("%d", &n);
    int flag = n % 5;
    if(flag <= 3 && flag != 0){
        printf("Fishing in day %d", n);
    }else{
        printf("Drying in day %d", n);
    }
    return 0;
}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群