算法分析练习题。
//求一个数组中相隔最小的两个元素的最小差
int getDiff(int* str, int n) {
sort(str, str + n);//排序,则两两相邻必为间隔最小
int min = str[n - 1] - str[n - 2];//初始化最小差
for (int i = n - 2; i > 0; i--) {//遍历
if (min > str[i] - str[i - 1]) {//如果有更小的差,则更新min值
min = str[i] - str[i - 1];
}
}
return min;
}
//在一个数组中,求一个既不是最大又不是最小的数,并求在最坏情况下的比较次数。
int getOdr(int* str, int n) {
int min = str[0], max = str[1];//初始化当前最大最小值
int t;
if (min > max) {//确保min<max 1次
t = min;
min = max;
max = t;
}
for (int i = 2; i < n; i++) {//循环查找
if (str[i] > min && str[i] < max) {//如果介于min和max之间,必定为中间值 2次
t = str[i];
return t;
}
else if (str[i] < min) {//如果小于min,则min必为中间值 1次
t = min;
min = str[i];//更新min
return t;
}
else if (str[i] > max) {//如果大于max,max必为中间值 1次
t = max;
max = str[i];//更新max
return t;
}
}
}
//求n个1能被2013整除的最小数
int getCout1() {
int count = 3;//计数
int num = 111;//比2013小肯定不行,所以从3位开始 2013是3的倍数
while (1) {
if (num % 2013 == 0) {
break;
}
else {
num = (num%2013) * 1000 + 111;
count += 3;
cout << num << " " << count << endl;
}
}
return count;
}