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) ;
}
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. 计算数组的标准差(整数部份)
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 ) ;
}
variance /= n;
return ( int ) sqrt ( variance) ;
}