-刷题小结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;
}
相关推荐
elseif12322 分钟前
【C++】并查集&家谱树
开发语言·数据结构·c++·算法·图论
偷吃的耗子34 分钟前
【CNN算法理解】:卷积神经网络 (CNN) 数值计算与传播机制
人工智能·算法·cnn
徐小夕@趣谈前端44 分钟前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
问好眼1 小时前
【信息学奥赛一本通】1275:【例9.19】乘积最大
c++·算法·动态规划·信息学奥赛
Daydream.V1 小时前
逻辑回归实例问题解决(LogisticRegression)
算法·机器学习·逻辑回归
代码无bug抓狂人1 小时前
C语言之表达式括号匹配
c语言·开发语言·算法
不穿格子的程序员1 小时前
从零开始写算法——普通数组篇:缺失的第一个正数
算法·leetcode·哈希算法
Nebula_g1 小时前
线程进阶: 无人机自动防空平台开发教程(更新)
java·开发语言·数据结构·学习·算法·无人机
rit84324992 小时前
基于MATLAB的环境障碍模型构建与蚁群算法路径规划实现
开发语言·算法·matlab
hoiii1872 小时前
MATLAB SGM(半全局匹配)算法实现
前端·算法·matlab