-刷题小结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;
}
相关推荐
梦帮科技6 分钟前
【3.0修订版】音乐权利 NFT:MusicRightsNFT 的确权思想与授权关联
网络协议·算法·web3·区块链·密码学·智能合约·零知识证明
Dfreedom.17 分钟前
基于PCA的光谱物质识别分析
算法
强化湿件的技术神甫26 分钟前
KS检验和Lilliefors正态性检验方法
算法
yi01133 分钟前
DAY23: LeetCode 27 → 283:从移除元素到移动零,理解快慢指针的两种思路
人工智能·笔记·python·算法·leetcode·排序算法·双指针
怕浪猫40 分钟前
多 Agent 系统面试怎么答?我总结了 4 种经典架构
人工智能·算法·面试
程序员清风1 小时前
排序算法:从冒泡排序到归并排序
数据结构·算法·排序算法
万年咸鱼1 小时前
C语言内功心法篇——变量与数据类型
c语言·jvm·算法
Omics Pro1 小时前
反式感知虚拟细胞!超越线性序列
数据库·人工智能·算法·机器学习·自然语言处理
-dzk-1 小时前
【动态规划】LC 152.乘积最大子数组
算法·动态规划
积流成海1 小时前
一致性哈希原理与实现:分布式系统负载均衡
算法·负载均衡·哈希算法·哈希函数·盘子工具站