1. 递归实现将字符串str中的元素逆序
- void ReverseStr2(char* str) {
- char temp = *str;
- int len = strlen(str);
- *str = *(str + len - 1);
- *(str + len - 1) = '\0';
- if (strlen(str + 1) > 1) ReverseStr2(str + 1);
- *(str + len - 1) = temp;
- }
复制代码 2. 对数组arr进行冒泡排序(升序)
- void BubbleSort(int arr[], int size)
- {
- // 这里求sizeof(arr)是错误的,因为arr实际上是一个指针,其长度是固定的8个字节
- // int size = sizeof(arr) / sizeof(arr[0]);
- for (int i = 0; i < size - 1; i++) {
- int flag = 0;
- for (int j = size - 1; j > i; j--) {
- if (arr[j - 1] > arr[j]) {
- swap_2(&arr[j - 1], &arr[j]);
- flag = 1;
- }
- }
- if (!flag) return;
- }
- }
复制代码 3. 对数组从下标low到下标hihg区间内的元素进行快速排序(升序)
- /// <summary>
- /// 对数组从下标low到下标hihg区间内的元素进行快速排序(升序)
- /// </summary>
- /// <param name="arr">整形数组</param>
- /// <param name="low">起始元素下标</param>
- /// <param name="high">终止元素下标</param>
- void QuickSort(int arr[], int low, int high) {
- if (low < high) {
- int pivot_pos = Partition(arr, low, high);
- QuickSort(arr, low, pivot_pos - 1);
- QuickSort(arr, pivot_pos + 1, high);
- }
- }
- int Partition(int arr[], int low, int high) {
- int pivot = arr[low];
- while (low < high) {
- while (low < high && arr[high] >= pivot) --high;
- arr[low] = arr[high];
- while (low < high && arr[low] <= pivot) ++low;
- arr[high] = arr[low];
- }
- arr[low] = pivot;
- return low;
- }
复制代码 4. 在数组中使用二分查找(折半查找)目标关键字
- /// <summary>
- /// 二分查找
- /// </summary>
- /// <param name="a">数组名</param>
- /// <param name="size">数组长度</param>
- /// <param name="key">目标关键字</param>
- /// <returns>
- /// 查找成功返回目标关键字在数组中的下标
- /// 否则返回-1
- /// </returns>
- int BianrySearch(int a[], int size,int key) {
- int low = 0;
- int high = size;
- int mid;
- while (low <= high) {
- mid = (low + high) / 2;
- if (a[mid] == key) return mid;
- else if (a[mid] < key) low = mid + 1;
- else high = mid - 1;
- }
- return -1;
- }
复制代码 5. 求n的阶乘
- int factorial(int n) {
- if (n == 1) return 1;
- else return n * factorial(n - 1);
- }
复制代码 6. 判断year是否为闰年
- /// <summary>
- /// 判断year是否为闰年
- /// </summary>
- /// <param name="year">年份year</param>
- /// <returns>是闰年返回1, 否则返回0</returns>
- int isLeapYear(int year) {
- // 闰年的判断规则:能被4整除且不能被100整除 或 能被400整除
- if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) return 1;
- else return 0;
- }
复制代码 7. 求两个数的最大公约数(暴力求解)
- int GetGCD(int a, int b) {
- int min = a < b ? a : b;
- int m = min;
- while (1) {
- if (a % m == 0 && b % m == 0) break;
- m--;
- }
- return m;
- }
复制代码 8. 求两个数的最大公约数(辗转相除法)
- int GetGCD_2(int a, int b) {
- int c;
- c = a % b; // 不用管a,b谁大谁小,结果都是一样的
- while (c > 0) {
- a = b;
- b = c;
- c = a % b;
- }
- return b;
- }
复制代码 9. 统计1~100的所有整数中,出现多少个数字9
- // 9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99
- int GetNum9(void) {
- int count = 0;
- for (int i = 1; i <= 100; i++) {
- int num = i;
- while (num > 0) {
- if (num % 10 == 9) {
- count++;
- }
- num /= 10;
- }
- }
- return count;
- }
复制代码 10. 计算1/1 + 1/2 + 1/3 + 1/4 + … + 1/100的和
- double fractionSum(void) {
- double sum = 0.0;
- for (int i = 1; i <= 100; i++) {
- sum += 1.0 / i;
- }
- return sum;
- }
复制代码 11. 打印99乘法表
- void print_multiplication_table(void) {
- for (int i = 1; i <= 9; i++) {
- for (int j = 1; j <= i; j++) {
- printf("%2d ×%2d = %2d\t", i, j, i * j);
- }
- printf("\n");
- }
- }
复制代码 12. 求一个数的每位之和(递归)
- /// <summary>
- /// 计算一个数的每位之和(递归)
- /// </summary>
- /// <param name="n">非负整数n</param>
- /// <returns>返回组成它的数字之后</returns>
- unsigned int DigitSum(unsigned int n) {
- //unsigned int sum = n % 10;
- //n /= 10;
- //if (n > 0) return sum + DigitSum(n);
- //return sum;
- if (n > 9) return DigitSum(n / 10) + n % 10;
- else return n;
- }
复制代码 13. 求一个整数n的k次方
- /// <summary>
- /// 求一个数的k次方
- /// </summary>
- /// <param name="n">整数n</param>
- /// <param name="k">次方数k</param>
- /// <returns>返回n^k</returns>
- double myPow(int n, int k) {
- if (k > 0) {
- return n * myPow(n, k - 1);
- }
- else if (k == 0) return 1;
- else return 1.0 / myPow(n, -k);
- }
复制代码 14. 将数组中的内容逆序排列
- void ReverseArr(int arr[], int size)
- {
- for (int i = 0; i < size / 2; i++) {
- int temp = arr[i];
- arr[i] = arr[size - 1 - i];
- arr[size - 1 - i] = temp;
- }
- }
复制代码 15. 计算数组的标准差(整数部份)
- /// <summary>
- /// 计算数组的标准差
- /// </summary>
- /// <param name="arr">数组名</param>
- /// <param name="n">数组长度</param>
- /// <returns>正确长度返回标准差,错误长度返回-1</returns>
- int calculate_variance(int arr[], int n) {
- if (n < 2) {
- printf("数组长度至少是2\a\n");
- return -1;
- }
- int i;
- int sum = 0; // 总和
- double mean = 0.0; // 均值
- double variance = 0.0; // 方差
- // 求和
- for (i = 0; i < n; i++) {
- sum += arr[i];
- }
- // 求均值
- mean = 1.0 * sum / n;
- // 求方差
- for (i = 0; i < n; i++) {
- variance += pow(arr[i] - mean, 2); // math.h
- }
- variance /= n;
- return (int)sqrt(variance); // 返回标准差的整数部份
- }
复制代码 16. 判断一个数是否为素数
- /// <summary>
- /// 判断一个数是否为素数
- /// </summary>
- /// <param name="a">正整数a</param>
- /// <returns>是素数返回1,否则返回0</returns>
- int isPrime(int a){
- // 素数的判定规则:对数a,把n除以从2到sqrt(a)之间的每一个数,只要有一个余数为0,就不是素数
- if (a <= 1) return 0;
- for (int i = 2; i * i <= a; i++) {
- if (a % i == 0) return 0;
- }
- return 1;
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |