阶梯问题
用正整数数列表示一段地方的高度,当一段地方的高度为一个逐一上升的序列是,我们称它为一个阶梯,例如,4、5、6、7、8是一个长度为5的阶梯。现在给定一个正整数数列,找出它最长的阶梯,并输出,如果没有,速出“No Ans”.
这个该怎么编写?
[解决办法]
int maxSteps(int a[], int n)
{
int maxs = 1, cnt=1;
for (int i = 1; i < n; ++i) {
if (a[i] > a[i-1])
++cnt;
else {
maxs = (maxs > cnt) ? maxs : cnt;
cnt = 1;
}
}
maxs = (maxs > cnt) ? maxs : cnt;
return maxs;
}
int main(int argc, char **argv)
{
int a[] = {2,3,1,2,3,4,2,5,6,7};
int m = maxSteps(a, sizeof(a)/sizeof(a[0]));
if (m > 1)
cout << m << endl;
else
cout << "No Ans.\n";
return 0;
}
[解决办法]
- C/C++ code
#include <iostream>using namespace std;#define LENGTH 10int main(){ int data[LENGTH] = {0,1,2,4,5,6,7,8,10,11}; int maxlen = 1; int curlen = 1; for(int i = 0;i < LENGTH;i++) { if(data[i] == data[i + 1] - 1 && i != LENGTH - 1) { ++curlen; } else { if(curlen > maxlen) { maxlen = curlen; curlen = 1; } } } if(maxlen != 1) { cout << "maxlen is " << maxlen << endl; } else { cout << "no ans" << endl; } cin.get(); return 0; }