看《天勤数据结构》看到一个有意思的题目
一般正常人的想法是利用一个i变量遍历整个数组,然后使用一个中间变量min来找出最小值
#include <iostream>
using namespace std;
void searchMin(int a[], int n, int &min){ //min用来保存最小值, n用来存储数组a的长度
for (int i=0; i<n; i++){
if (a[i]<min){
min=a[i];
}
}
}
int main(){
int min=INT_MAX;
int a[500];
int n;
cin>>n;
for (int i=0; i<n; i++){
cin>>a[i];
}
searchMin(a, n, min);
cout<<min<<endl;
return 0;
}
而在只当允许使用一个额外变量的时候,就只能使用下列这种方法,使用i的十位数位当做游标,i的个位数来存储最小值,
因为题目前置条件为数组当中的每个数都是个位正整数,且数量总数都是小于N(N<=9)
#include <iostream>
using namespace std;
//因为数组当中的每个数都是个位正整数,所以可以采用下列解法
void searchMin(int a[], int n, int &i){
i=a[0];
while (i/10<=n-1){
if (i%10>a[i/10]){
i=i-i%10;
i=i+a[i/10];
}
i=i+10;
}
i=i%10;
}
int main(){
int a[500];
int n;
int i;
cin>>n;
for (int i=0; i<n; i++){
cin>>a[i];
}
searchMin(a, n, i);
cout<<i<<endl;
return 0;
}