【算法笔记题解】《算法笔记知识点记录》第二章——快速入门3[函数、指针]

简介: 【算法笔记题解】《算法笔记知识点记录》第二章——快速入门3[函数、指针]

全文目录

 🍕1.1 函数

        问题 A: 习题7-5 字符串逆序存放

        问题 B: 习题7-7 复制字符串中的元音字母

 ⚔️1.2 指针

        问题 A: C语言10.1

        问题 B: C语言10.2

        问题 C: C语言10.10

        问题 D: C语言10.15

        问题 E: C语言10.16

 📑写在最后

🍕1.1 函数

地址合集:2.6小节——C/C++快速入门->函数


问题 A: 习题7-5 字符串逆序存放

题目描述


写一个函数将一个字符串按反序存放。在主函数中输入一个字符串,通过调用该函数,得到该字符串按反序存放后的字符串,并输出。


输入


一行字符串。


输出


输入字符串反序存放后的字符串。单独占一行。


样例输入


abcd

样例输出


abcd


解题思路


读入一行。然后进行翻转,然后输出就好了。


#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char s[100];
    cin.getline(s,100);
    int temp = strlen(s);
    for(int i = 0;i < temp / 2;i++){
        s[i] = s[temp - 1 - i] ^ s[i];
        s[temp - 1 - i] = s[temp - 1 - i] ^ s[i];
        s[i] = s[temp - 1 - i] ^ s[i];
    }
    puts(s);
    return 0;
}


问题 B: 习题7-7 复制字符串中的元音字母

题目描述


写一个函数,将一个字符串中的元音字母复制到另一个字符串中。在主函数中输入一个字符串,通过调用该函数,得到一个有该字符串中的元音字母组成的一个字符串,并输出。


输入


一个字符串(一行字符)。


输出


该字符串所有元音字母构成的字符串。行尾换行。


样例输入


CLanguage


样例输出


auae


解题思路


判断如果是元音字母就复制就好了呗?利用了hash表加快检索速度,所谓hash表就是把数据映射为下标直接进行查找。


#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int s[128];
void vowels(char s1[], char s2[]);
int main(){
    memset(s,0,sizeof(s));
    char temps[11]="aeiouAEIOU";
    for(int i = 0;temps[i] != '\0';i++)
        s[temps[i]] ++;
    char temp[100],ans[100];
    cin.getline(temp,100);
    vowels(temp,ans);
    puts(ans);
    return 0;
}
void vowels(char s1[], char s2[]){
    int s2num = 0;
    for(int i = 0;s1[i] != '\0';i++)
        if(s[s1[i]]) s2[s2num++] = s1[i];
    s2[s2num] = '\0';
}


⚔️1.2 指针

地址合集:2.7小节——C/C++快速入门->指针


问题 A: C语言10.1

题目描述


输入a和b两个整数,按先大后小的顺序输出a和b。注意请使用指针变量的方式进行比较和输出。


输入


两个用空格隔开的整数a和b。


输出


按先大后小的顺序输出a和b,用空格隔开。

请注意行尾输出换行。


样例输入


5 9


样例输出


9 5


解题思路


按照要求写个函数,如果小于就交换两个变量就完事了。


#include<cstdio>
void if_swap(int *,int *);
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    if_swap(&a,&b);
    printf("%d %d\n",a,b);
    return 0;
}
void if_swap(int *a,int *b){
    if(*a < *b){
        int temp = *a;
        *a = *b;
        *b = temp;
    }
}


问题 B: C语言10.2

题目描述


输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。


输入


三个用空格隔开的整数a、b和c。

输出


按先大后小的顺序输出a、b和c,用空格隔开。

请注意行尾输出换行。

样例输入


9 0 10

样例输出


10 9 0


解题思路


套用一下上面那个就好了其实0.0,不过因为是三个数字 需要三次比较


#include<cstdio>
void if_swap(int *,int *);
int main(){
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if_swap(&a,&b);
    if_swap(&a,&c);
    if_swap(&b,&c);
    printf("%d %d %d\n",a,b,c);
    return 0;
}
void if_swap(int *a,int *b){
    if(*a < *b){
        int temp = *a;
        *a = *b;
        *b = temp;
    }
}


问题 C: C语言10.10

题目描述


给定字符串定义char *a = “I love China!”,读入整数n,输出在进行了a = a + n这个赋值操作以后字符指针a对应的字符串。


输入


一个整数n,保证0<=n<13.

输出


输出进行了题目描述中赋值操作之后a对应的字符串。

请注意行尾输出换行。

样例输入


7

样例输出


China!


解题思路


还记得我们说过的指针加法么?直接进行加n就好了。

#include<cstdio>
int main(){
    char temp[100] = "I love China!";
    int n;
    scanf("%d",&n);
    char *p = temp;
    p+=n;
    puts(p);
    return 0;
}


问题 D: C语言10.15

题目描述


输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。


输入


输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。


输出


输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。


样例输入


China

CLOCK

deal


样例输出


CLOCK

China

deal


解题思路


其实和上面也差不多,就是要注意两点


末尾输出无空行
字符串需要用strcpy
#include<cstdio>
#include<cstring>
void swap(char *a, char *b){
    char temp[100];
    if(strcmp(a,b) > 0){
        strcpy(temp,a);
        strcpy(a,b);
        strcpy(b,temp);
    }
}
int main(){
    char s[3][100];
    for(int i = 0;i < 3;i++)    scanf("%s",s[i]);
    swap(s[0],s[1]);
    swap(s[0],s[2]);
    swap(s[1],s[2]);
    for(int i = 0;i < 2;i++)    puts(s[i]);
    printf("%s",s[2]);
    return 0;
}


问题 E: C语言10.16

题目描述


输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。


输入


用空格隔开的10个整数。

输出


输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。

请注意行尾输出换行。


样例输入


1 5 2 4 9 0 3 8 7 6


样例输出


0 5 2 4 6 1 3 8 7 9


解题思路


按照要求些就好了。

#include<cstdio>
void scan(int *a){
    for(int i = 0;i < 10;i++)   scanf("%d",&a[i]);
}
void print(int *a){
    for(int i = 0;i < 10;i++)   printf("%d ",a[i]);
    puts("");
}
void swap(int *a,int *b){
    *a = (*a) ^ (*b);
    *b = *a ^ *b;
    *a = (*a) ^ (*b);
}
void exe(int *a){
    int mini = 0,maxi = 0;
    for(int i = 0;i < 10;i++){
        if(a[i] > a[maxi])  maxi = i;
        if(a[i] < a[mini])  mini = i;
    }
    //printf("%d %d",maxi,mini);
    swap(&a[maxi],&a[9]);
    swap(&a[mini],&a[0]);
}
int main(){
    int a[10];
    scan(a);
    exe(a);
    print(a);
    return 0;
}


相关文章
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
140 67
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
61 4
|
3月前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
3月前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
3月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
96 1
|
3月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
83 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
25 0
|
12天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
5天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
8天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。