-刷题小结19

题目一

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将字符指针s所指字符串中的字符倒序
void reverseStr(char * s); 

int main() {
    char s[100+1];
    gets(s);
    reverseStr(s);
    printf("result=%s\n",s);
    return 0;
}

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

具体解法

利用strlen函数计算字符串s的长度n(即字符的个数,不包括字符串结束语\0);

通过循环遍历字符串的前半部分(i从0到n/2-1),将当前位置i的字符与对称位置n-i-1的字符进行交换;

由于字符串是以字符指针的形式传递,交换操作会直接修改原字符串的内容,无需返回新字符串。

cs 复制代码
//将字符指针s所指字符串中的字符倒序
void reverseStr(char * s){
    int n=strlen(s);
    for(int i=0;i<n/2;i++){
        int temp=s[i];
        s[i]=s[n-i-1];
        s[n-i-1]=temp;
    }
}

题目二

cs 复制代码
#include <stdio.h>
#define HERB_NAME_LEN 1000
#define HERB_EPITHET_NUM 10

char errorMsg[] = "没有那么多别名!";
struct HerbMedicine {
   int herbNo;//中药编号
   char name[HERB_NAME_LEN+1];//中药正名
   char epithet[HERB_EPITHET_NUM][HERB_NAME_LEN+1];//每个中药保存最多HERB_EPITHET_NUM个别名
   int epithetNum; // 别名个数
};
char* getEpithet(struct HerbMedicine *pHerb, int i);

int main()
{
  struct HerbMedicine herb = {10000, "麦冬", {"麦门冬","杭寸冬","杭麦冬","寸冬","大麦冬"}, 5};
  int i;
  scanf("%d", &i);

  printf("%s\n", getEpithet(&herb, i));

  return 0;

}

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

题目分析

理解结构体与参数含义:

struct HerbMedicine结构体包括:

epithet:存储别名的二维字符数组(最多HERB_EPITHET_NUM个别名);

epithetNum:实际的别名个数;

函数参数i是用户传入的"第i个别名"(注意:用户输入的i是从1开始的序号,而数组下标是从0开始的)。

具体解法

  1. 将用户传入的i转换为数组下标(i-1),并检查改下标是否在有效范围内(i-1既不小于0,也不超过实际别名个数);
  2. 若下标有效,返回结构体中对应的下标别名;
  3. 若无效,返回全局定义的错误信息errorMsg。
cs 复制代码
char* getEpithet ( struct HerbMedicine *pHerb, int i ){
    if(i-1>=0&&i-1<pHerb->epithetNum){
        return pHerb->epithet[i-1];
    }
    else return errorMsg;
    }

题目三

解题思路

统一文件名格式:所有字母先转小写,再将首字母(若为字母)转大写。

具体解法

  1. 读取文件名的数量n;
  2. 循环n次,每次读取一个文件名存入字符数组s(保证了多组输入);
  3. 遍历文件名的每个字符,如果字符为大写字母,通过加32(ASCII码偏移)转换为对应的小写字母,数字和-保持不变;
  4. 在处理后的字符中,如果首字符为小写字符,通过减32转换为对应的大写字母,若首字母是数字或-,保持不变;
  5. 每次处理完一个文件名后,直接输出结果。
cs 复制代码
#include <stdio.h>
#include <string.h>

int main(){
    int n;
    scanf("%d",&n);
    while(n--){
        char s[50];
        scanf("%s",s);
        int a=strlen(s);
        for(int i=0;i<a;i++){
            if(s[i]>='A'&&s[i]<='Z'){
                s[i]+=32;
            }
        }
        if(s[0]>='a'&&s[0]<='z'){
            s[0]-=32;
        }
        printf("%s\n",s);
    }
    return 0;
}

题目四

具体解法

  1. 首先读取班级数量N,接着读取N个班级的学生人数,存入数组a,最后读取每个场地能容纳的学生人数C;
  2. 通过循环遍历数组a,累加所有班级的学生人数,得到总人数sum;
  3. 计算所需场地数量:如果总人数sum能被C整除,则场地数为sum/C,若不能整除,则场地数为sum/C+1(需额外一个场地容纳剩余学生);
  4. 最后输出结果x。
cs 复制代码
#include <stdio.h>

int main(){
    int N;
    scanf("%d",&N);
    int a[N];
    for(int i=0;i<N;i++){
        scanf("%d",&a[i]);
    }
    int C;
    scanf("%d",&C);
    int x,sum=0;
    for(int i=0;i<N;i++){
        sum+=a[i];
    }
    if(sum%C!=0)x=sum/C+1;
    else x=sum/C;
    printf("%d",x);
    return 0;
}
相关推荐
橘颂TA6 分钟前
【剑斩OFFER】算法的暴力美学——LeetCode 703 题:数据流中的第 K 大元素
网络·算法·结构与算法
信奥卷王14 分钟前
2025年9月GESPC++四级真题解析(含视频)
数据结构·c++·算法
朔北之忘 Clancy16 分钟前
第一章 顺序结构程序设计(2)
c++·算法·青少年编程·竞赛·教材·考级·讲义
橘颂TA20 分钟前
【剑斩OFFER】算法的暴力美学——力扣 1046 题:最后一块石头的重量
算法·leetcode·职场和发展
ldccorpora23 分钟前
GALE Phase 1 Distillation Training数据集介绍,官网编号LDC2007T20
人工智能·深度学习·算法·机器学习·自然语言处理·语音识别
有一个好名字24 分钟前
力扣- 统计二叉树中好节点的数目
算法·leetcode·职场和发展
jghhh0137 分钟前
三维热传导方程和泊松方程的有限元方法MATLAB实现
开发语言·算法·matlab
fengfuyao9851 小时前
基于拥挤距离的多目标粒子群优化算法 (MOPSO-CD)
算法
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #238:除自身以外数组的乘积(左右乘积数组法、分治法等多种方法详解)
算法·leetcode·分治法·算法面试·除自身以外数组的乘积·前缀乘积·左右乘积数组法