1.
//求一个数变成1所需的步数,规则如下
// 1.偶数直接除以2
// 2.奇数加1或减1
// 例如: 61
// 61 60 30 15 16 8 4 2 1 一共8步
// 1.偶数直接除以2
// 2.奇数加1或减1
// 例如: 61
// 61 60 30 15 16 8 4 2 1 一共8步
- #define min(a,b) (((a) < (b)) ? (a) : (b))
- int StepNum(int n)
- {
- if (n <= 0)
- {
- printf("ERROR ");
- return 0;
- }
- else if (n == 1)
- {
- return 0;
- }
- else if (n % 2 == 0)
- {
- return StepNum(n/2) + 1;
- }
- else
- {
- return min(StepNum(n/2), StepNum(n/2 + 1)) + 2;
- }
- }
2. 有二维数组int a[n][m],每一行有一个最大的数,请写代码计算出这些最大数中最小的一个
- #include <stdio.h>
- //有二维数组int a[n][m],每一行有一个最大的数,请写代码计算出这些最大数中最小的一个。
- int FindMin(int *array, int n, int m)
- {
- //每行的最大值
- int rowMax = 0;
- //各行的最小值
- int min = 0;
- for(int i=0; i < n; i++)
- {
- rowMax = array[i * m];
- for(int j=1;j < m; j++)
- {
- //找到行最大值
- if(array[i*m+j] > rowMax)
- rowMax=array[i*m+j];
- }
- //找行最小值
- if (i == 0)
- {
- min = rowMax;
- }
- else if(rowMax < min)
- {
- min = rowMax;
- }
- }
- return min;
- }
- int main(void)
- {
- int arr[3][4] = { {1, 5, 3, 10}, {7, 3, 2, 4}, {9, 4, 6, 7} };
- int minMax = FindMin((int *)arr, 3, 4);
- printf("%d/n", minMax);
- }