文章目录 1. 递归实现将字符串str中的元素逆序 2. 对数组arr进行冒泡排序(升序) 3. 对数组从下标low到下标hihg区间内的元素进行快速排序(升序) 4. 在数组中利用二分查找(折半查找)目标关键字 5. 求n的阶乘 6. 判断year是否为闰年 7. 求两个数的最大公约数(暴力求解) 8. 求两个数的最大公约数(辗转相除法) 9. 统计1~100的所有整数中,出现多少个数字9 10. 计算1/1 + 1/2 + 1/3 + 1/4 + ... + 1/100的和 11. 打印99乘法表 12. 求一个数的每位之和(递归) 13. 求一个整数n的k次方
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)
{ 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区间内的元素进行快速排序(升序)
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. 在数组中利用二分查找(折半查找)目标关键字
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是否为闰年
int isLeapYear ( int year) { 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; while ( c > 0 ) { a = b; b = c; c = a % b; } return b;
}
9. 统计1~100的所有整数中,出现多少个数字9
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. 求一个数的每位之和(递归)
unsigned int DigitSum ( unsigned int n) { if ( n > 9 ) return DigitSum ( n / 10 ) + n % 10 ; else return n;
}
13. 求一个整数n的k次方
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) ;
}