#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//作业讲解
//创建一个数组,用函数实现初始化,打印每个元素,数组元素的逆序
//void Init(int* arr, int sz)
//{
//  int i = 0; 
//  for (i = 0; i < sz; i++)
//  {
//    arr[i] = i;
//  }
//}
//void Print(int* arr, int sz)
//{
//  int i = 0;
//  for (i = 0; i < sz; i++)
//  {
//    printf("%d ", arr[i]);
//  }
//  printf("\n");
//}
//void Reverse(int* arr, int sz)
//{
//  int left = 0;
//  int right = sz - 1;
//  while (left < right)
//  {
//    int tmp = arr[left];
//    arr[left] = arr[right];
//    arr[right] = tmp;
//    left++; 
//    right--;
//  }
//} 
//int main()
//{
//  int arr[10] = { 0 };
//  int sz = sizeof(arr) / sizeof(arr[0]);
//  Init(arr, sz);
//  Print(arr, sz);
//  Reverse(arr, sz);
//  Print(arr, sz);
//  return 0;
//}
//将两个数组的内容交换
//void Print(int* arr, int sz)
//{
//  int i = 0;
//  for (i = 0; i < sz; i++)
//  {
//    printf("%d ", arr[i]);
//  }
//  printf("\n");
//}
//int main()
//{
//  int arr1[] = { 1,3,5,7,9 };
//  int arr2[] = { 0,2,4,6,8, };
//  int tmp = 0;
//  int sz = sizeof(arr1) / sizeof(arr1[0]);
//  int i = 0;
//  Print(arr1, sz);
//  Print(arr2, sz);
//  for (i = 0; i < sz; i++)
//  {
//    tmp = arr1[i];
//    arr1[i] = arr2[i];
//    arr2[i] = tmp;
//  }
//  printf("\n");
//  Print(arr1, sz);
//  Print(arr2, sz);
//  return 0;
//}
//求两个数二进制位的不同个数
//int get_diff_bit(int m, int n)
//{
//  int tmp = m ^ n;//两个数异或后不同位就变成1
//  int count = 0;
//  while (tmp)
//  {
//    tmp = tmp & (tmp - 1);//统计有几个1
//    count++;
//  }
//  return count;
//}
//int main()
//{
//  int m = 0;
//  int n = 0;
//  scanf("%d%d", &m, &n);
//  int count = get_diff_bit(m, n);
//  printf("count=%d\n", count);
//  return;
//}
//分别打印出一个数二进制的奇数位和偶数位
//void print(int a)
//{
//  int i = 0;
//  printf("奇数位:\n");
//  for (i = 30; i >= 0; i -= 2)
//  {
//    printf("%d ", (a >> i) & 1);
//  }
//  printf("\n");
//  printf("偶数位:\n");
//  for (i = 31; i >= 0; i -= 2)
//  {
//    printf("%d ", (a >> i) & 1);
//  }
//  printf("\n");
//}
//int main()
//{
//  int a = 0;
//  scanf("%d", &a);
//  print(a);
//  return 0;
//}
//用指针打印数组内容
//void print(int* p, int sz)
//{
//  int i = 0;
//  for (i = 0; i < sz; i++)
//  {
//    printf("%d ", *(p + i));
//  }
//}
//int main()
//{
//  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//  int sz = sizeof(arr) / sizeof(arr[0]);
//  print(arr, sz);
//  return 0;
//}
//打印乘法表
//void print_table(int n)
//{
//  int i = 0;
//  for (i = 1; i <= n; i++)
//  {
//    int j = 0;
//    for (j = 1; j <= i; j++)
//    {
//      printf("%-2d*%-2d=%-4d", i, j, i * j);
//    }
//    printf("\n");
//  }
//}
//int main()
//{
//  int n = 0;
//  scanf("%d", &n);
//  print_table(n);
//  return 0;
//}
//递归方式逆序字符串中的字符
//int my_string(char arr[])
//{
//  int i = 0;
//  while (arr[i]!='\0')
//  {
//    i++;
//  }
//  return i;
//}
////循环方法
////void revese_string(char arr[])
////{
////  int left = 0;
////  int right = my_string(arr)-1;
////  while (left < right)
////  {
////    int tmp = arr[left];
////    arr[left] = arr[right];
////    arr[right] = tmp;
////    left++;
////    right--;
////  }
////}
////递归方法
//void revese_string(char* arr)
//{
//  char tmp = arr[0];
//  int len = my_string(arr);
//  arr[0] = arr[len - 1];
//  arr[len - 1] = '\0';
//  if (my_string(arr + 1) >= 2)
//  {
//    revese_string(arr + 1);
//  }
//  arr[len - 1] = tmp;
//}
//int main()
//{
//  char arr[30] = {0};
//  scanf("%s", arr);
//  revese_string(arr);
//  printf("%s\n", arr);
//  return 0;
//}
//递归 求一个非负整数组成它的数字之和
//int  DigitSum(int a)
//{
//  if (a > 9)
//  {
//    return  DigitSum(a / 10) + a % 10;
//  }
//  else
//  {
//    return a;
//  }
//}
//int main()
//{
//  unsigned int a = 0;
//  scanf("%d", &a);
//  int ret = DigitSum(a);
//  printf("ret=%d\n", ret);
//  return 0;
//}
//递归实现n的k次方
//double Pow(int n, int k)
//{
//  if (k < 0)
//    return(1.0 / 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("ret=%lf", ret);
//  return 0;
//}