c刷题(二)

目录

加减混合运算

计算n的k次方

计算非负整数各位之和

字符串逆序

双指针 

递归

矩阵计算

 矩阵转置


加减混合运算

题目:计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果。

一般情况我们可以写个循环然后在用条件判断语句对两种情况进行判断,但这里有个更优质的办法,设置一个开关变量在正数和负数进行切换即可。

    int flag = 1;double sum = 0;for (int i = 1; i < 100; i++){sum += flag* (1.0 / i);//注意小数flag = -flag;}printf("%lf", sum);

在计算分数时,除数和被除数至少有一个是小数,否则会被当成整数运算

计算n的k次方

三种情况(递归)

  • n < 0, 1.0 / Pow(n, -k)(利用正向递归后变为倒数)
  • n > 0, n* Pow(n,k-1)
  • n = 0, 1
double Pow(int n, int k)
{if (k < 0){return 1.0 / n * Pow(n, -k);}else if (k == 0){return 1;}else return n * Pow(n, k - 1);
}
int main()
{int n = 0;int k = 0;scanf("%d %d", &n, &k);double ret = Pow(n, k);printf("%lf\n", ret);return 0;
}

计算非负整数各位之和

用递归从后往前依次拆分,直到只有一位数。

int DigitSum(unsigned int n)
{if (n < 10)return n;elsereturn DigitSum(n / 10) + n % 10;
}
int main()
{unsigned int num = 0;scanf("%u", &num);int sum = DigitSum(num);printf("%d\n", sum);return 0;
}

字符串逆序

给定一个字符假设abcdef,逆置成fedcba。

双指针 

设置首尾指针,交换后往中间靠拢。

//下标
void reverse_string(char* str)
{int len = strlen(str);int left = 0;int right = len - 1;while (left<right){char tmp = *(str + left);*(str + left) = *(str + right);*(str + right) = tmp;left++;right--;}
}
//指针
void reverse_string(char* str)
{int len = strlen(str);char* left = str;char* right = str + len - 1;while (left<right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}

递归

递归可能不容易想到,因为这是从两头递归到中间结束条件即只剩一个数或没有数可以交换。递归怎么做到两头并进呢?这就要用到我们的\0了,当左边的数变为右边时,先不急着将左边的数换到右边,而是在右边位置补上一个\0,然后指针+1,形成递归,这样交换的时候就不用考虑\0后已交换的内容,实现正确逆置。

上图是递归的具体过程,从图可知,数组长度从手动替换\0开始计算(如果不满足条件就将\0替换成数字)。判断条件为数组长度大于1满足递归条件,但这是偶数的情况,如果是奇数,长度就是4,递归一次后变为2,此后不满足递归条件,所以正确判断条件应该是数组长度大于2

void reverse_string(char* str)
{int len = strlen(str);char* tmp = *str;*str = *(str + len - 1);*(str + len - 1) = '\0';if (*str > 2){reverse_string(str + 1);}*(str + len - 1) = 'tmp';
}

矩阵计算

 矩阵打印用二维矩阵,在里层输入矩阵的值,判断大于0的数进行累加。 

    int n = 0;int m = 0;scanf("%d %d", &n, &m);int i = 0;int k = 0;int sum = 0;for (i = 0; i < n; i++){int j = 0;for (j = 0; j < m; j++){scanf("%d", &k);if (k >= 0)sum += k;}}printf("%d\n", sum);

 矩阵转置

注意转置要先将值存放到二维数组里,然后从原先按行打印变为按列打印即可。

	int n = 0;int m = 0;scanf("%d %d", &n, &m);//int arr[n][m];//c99int arr[10][10];int i = 0;int j = 0;for (i = 0; i < n; i++){for (j = 0; j < m; j++){scanf("%d", &arr[i][j]);}}for (j = 0; j < m; j++){for (i = 0; i < n; i++){printf("%d ", arr[i][j]);}printf("\n");}

如果在一些刷题网站上,我们可以直接使用变长数组初始化数组,如果不使用变长数组,可以直接设置数组大小为题目规定的最大长度即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62523.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【讯飞星火认知大模型】大模型之星火手机助理

目录 1. 讯飞星火认知大模型介绍 2. API 申请 3. 星火手机助理 4. 效果展示 1. 讯飞星火认知大模型介绍 讯飞星火认知大模型是科大讯飞自研的基于深度学习的自然语言处理模型&#xff0c;它可以理解和生成中文&#xff0c;执行多种任务&#xff0c;如问答、翻译、写作、编…

批量翻译多个文件夹,让你的文件管理更智能高效!

大家好&#xff01;对于经常需要管理大量文件夹的你来说&#xff0c;每次手动逐个改名实在是一项繁琐且易出错的工作。现在&#xff0c;我们为你带来一款强大的文件夹批量改名工具&#xff0c;让你能够轻松实现多个文件夹的批量翻译&#xff0c;让你的文件管理更智能高效 第一…

【数学建模】--聚类模型

聚类模型的定义&#xff1a; “物以类聚&#xff0c;人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计&#xff0c;分析或预测&#xff1b;也可以探究不…

AI抠图使用指南:Stable Diffusion WebUI Rembg实用技巧

抠图是图像处理工具的一项必备能力&#xff0c;可以用在重绘、重组、更换背景等场景。最近我一直在探索 Stable Diffusion WebUI 的各项能力&#xff0c;那么 SD WebUI 的抠图能力表现如何呢&#xff1f;这篇文章就给大家分享一下。 安装插件 作为一个生成式AI&#xff0c;SD…

centos7 安装 docker 不能看菜鸟教程的 docker 安装,有坑

特别注意 不能看菜鸟教程的 docker 安装&#xff0c;有坑 如果机器不能直接上网&#xff0c;先配置 yum 代理 proxyhttp://172.16.0.11:8443 配置文件修改后即刻生效&#xff0c;再执行 yum install 等命令&#xff0c;就可以正常安装软件了。 参考 https://blog.csdn.net/c…

从零实战SLAM-第二课(SLAM中的基础数学)

空间数据的表达方式&#xff1a;点和向量两种形式。 向量的内积&#xff0c;也叫做点乘&#xff0c;是逐点相乘后累加&#xff0c;最终结果是一个标量&#xff0c;物理意义是一个向量在另一个向量上的投影。 外积&#xff0c;也叫做叉乘&#xff0c;两个向量拼起来成&#xff0…

逆向破解学习-登山赛车

试玩 课程中的内容 Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage;public class HookComYoDo1SkiSafari2TXYYB_01 extends HookImpl{Overridepublic String p…

JSON.stringify循环引用问题

前端使用到对象的深度复制通常会简单的使用JSON.parse(JSON.stringify(obj))实现 &#xff08;浅表复制会用Array.from、Object.assign、Object.create静态方法实现&#xff09;&#xff0c;但在对象存在循环引用的情况下&#xff08;比如&#xff1a;树结构中子对象存在parent…

Linux进程管理命令

一、进程 程序由一条条指令构成&#xff0c;在运行一个程序的时候就是把这些指令从第一条执行到最后一条&#xff0c;而进程是一个正在运行的程序。 比如说&#xff0c;一个main.c文件是不可以直接运行的&#xff0c;对main.c进行编译链接之后生成一个main.exe&#xff08;在W…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

网络原理(JavaEE初阶系列11)

目录 前言&#xff1a; 1.网络原理的理解 2.应用层 2.1自定义协议的约定 2.1.1确定要传输的信息 2.1.2确定数据的格式 3.传输层 3.1UDP 3.1.1UDP报文格式 3.2TCP 3.2.1确认应答 3.2.2超时重传 3.2.3连接管理 3.2.3.1三次握手 3.2.3.2四次挥手 3.2.4滑动窗口 3.…

2000-2021年地级市碳排放数据/地级市二氧化碳排放

2000-2021年地级市碳排放数据/地级市二氧化碳排放 1、时间&#xff1a;2000-2021年 2、来源&#xff1a;主要是各级统计年鉴、相关统计资料等。其中&#xff0c;能源部分分能源品种分部门的能 源消费数据来源于《中国能源统计年鉴》以及各级统计年鉴&#xff1b;工业过程和产…