沈阳淘宝网站建设,3d网站建设,家装设计效果图网站,西安微网站制作目录
加减混合运算
计算n的k次方
计算非负整数各位之和
字符串逆序
双指针
递归
矩阵计算 矩阵转置 加减混合运算 题目#xff1a;计算1 / 1 - 1 / 2 1 / 3 - 1 / 4 1 / 5 …… 1 / 99 - 1 / 100 的值#xff0c;打印出结果。 一般情况我们可以写个循环然后在用条…目录
加减混合运算
计算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 (leftright){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 (leftright){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);}
如果在一些刷题网站上我们可以直接使用变长数组初始化数组如果不使用变长数组可以直接设置数组大小为题目规定的最大长度即可。