2025-03-22 19:15:32 +08:00

5.8 KiB
Raw Blame History

试题-1


/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
编写一个 C 语言函数,函数接收一个整数数组 arr 以及数组的长度 size 作为参数,使用 bool 类型返回该数组中是否存在重复的元素。在 main 函数中,输入多个正整数(输入非数字字符表示输入结束)并调用该函数,根据返回结果输出相应的提示信息。
示例:
【请输入多个整数输入非数字字符结束输入】1 2 3 4 5 5 6 a
数组中存在重复元素。
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数 main 或其它函数中给出的内容,仅在
      Program-End之间填入若干语句。
      不要删除标志否则不得分。
      不要修改或删除Program-End之外的内容否则不得分。
----------------------------------------------------------------------*/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>


bool hasDuplicates(int arr[], int size) {
/**********Program**********/
	int i, j;
	for(i=0;i<size-1;i++){
		for(j=i+1;j<size;j++){
			if(arr[i] == arr[j]){
				return true;
			}
		}
	}
	return false;
/**********  End  **********/
}

int main() {
    int capacity = 10;
    int *arr = (int *)malloc(capacity * sizeof(int));
  
    if (arr == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }
    int size = 0;  
    int num;
    printf("【请输入多个整数(输入非数字字符结束输入):】");
    
    while (scanf("%d", &num) == 1) {
        
        if (size == capacity) {
            capacity *= 2;  
            arr = (int *)realloc(arr, capacity * sizeof(int));
            
            if (arr == NULL) {
                printf("内存分配失败!\n");
                return 1;
            }
        }
      
        arr[size++] = num;
    }
    
    while (getchar() != '\n');

    
    if (hasDuplicates(arr, size)) {
        printf("数组中存在重复元素。\n");
    } else {
        printf("数组中不存在重复元素。\n");
    }

    
    free(arr);
    return 0;
}

试题-2

/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
现在有一位赛车手要驾驶一台电动摩托车去完成多段赛程。这台电动摩托车的电池电量存储
上限是 100 度电哦,它有一个标称的平均电耗,也就是每行驶 100 公里,就会消耗 10度
电。这里有个很重要的前提条件要大家牢记呀,每一段赛程的距离都是小于 600 公里的哦,
并且每次出发的时候,电动摩托车的电池都是充满电的状态呢。还有一个关键的规则得注意
哦,如果电动摩托车到达某个地点之后,赛车手查看发现电池内剩余的电量低于电池总电量
的 10%(也就是 100×10% = 10 度电或者更少啦),那这个时候就必须得在这个地方给电
动摩托车充电了呢,请帮忙计算一下,这名驾驶员在赛程中的哪几段赛程前是需要充电的。

示例1
【请输入赛程段数:】
5
【请输入各段赛程距离,单位公里:】
380 200 390 400 300
【需要在以下几段赛程前充电:】
第 3 段赛程前
第 5 段赛程前

示例2
【请输入赛程段数:】
4
【请输入各段赛程距离,单位公里:】
190 140 110 80 
无需充电。

------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数 main 或其它函数中给出的内容,仅在
      Program-End之间填入若干语句。
      不要删除标志否则不得分。
      不要修改或删除Program-End之外的内容否则不得分。
----------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>  // 引入stdlib.h用于动态内存分配相关操作

#define TANK_CAPACITY 100  // 电池总容量(单位:度)
#define LOW_FUEL_LIMIT (0.10 * TANK_CAPACITY)  // 低电量阈值10%
#define AVG_CONSUMPTION_PER_100KM 10  // 平均电耗(单位:度/百公里)
#define FUEL_CONSUMPTION_PER_KM (AVG_CONSUMPTION_PER_100KM / 100.0)  // 每公里电耗(单位:度/公里)

int checkRefuelStops(int trips[], int count, int results[]) {
    int refuel_count = 0;  
    double current_fuel = TANK_CAPACITY;  
/**********Program**********/
    for (int i = 0; i < count; i++) {
    	if(current_fuel - trips[i]*FUEL_CONSUMPTION_PER_KM <= LOW_FUEL_LIMIT){
    		results[refuel_count++] = i+1;
    		current_fuel = TANK_CAPACITY;
		}
    	current_fuel -= trips[i]*FUEL_CONSUMPTION_PER_KM;
    }
/**********  End  **********/
    return refuel_count;
}

int main() {
    int num_trips;  
    printf("【请输入赛程段数:】\n");
    scanf("%d", &num_trips);

    
    int *trips = (int *)malloc(num_trips * sizeof(int));
    if (trips == NULL) {
        printf("内存分配失败!\n");
        return 1;
    }

    printf("【请输入各段赛程距离,单位公里:】\n");
    for (int i = 0; i < num_trips; ++i) {
        scanf("%d", &trips[i]);
    }

    
    int *results = (int *)malloc(num_trips * sizeof(int));
    if (results == NULL) {
        printf("内存分配失败!\n");
        free(trips);  
        return 1;
    }

    int refuel_count = checkRefuelStops(trips, num_trips, results);

    if (refuel_count > 0) {
        printf("【需要在以下几段赛程前充电:】\n");
        for (int i = 0; i < refuel_count; i++) {
            printf("第 %d 段赛程前\n", results[i]);  
        }
    } else {
        printf("无需充电。\n");
    }

    free(trips);  
    free(results);  

    return 0;
}