内容:一直一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串相同的元素,并且这个元素不能再延伸。
例如,在1,2,2,3,3,3,4,5,5,6中1,2,2,3,3,3,4,5,5,6都是平台.试编写一个程序,接受一个数组,把这个数组中最长的平台找出来。在这个例子中, 3,3,3就是该数组的中的最长的平台。
说明:
这个程序十分简单,但是编写好却不容易,因此在编写程序时应注意考虑下面几点:
1.使用变量越少越好
2.能否只把数组的元素每一个都只查一次就得到结果。
3.程序语句越少越好。
ps:这个问题曾经困扰过David Gries这位知名的计算机科学家。
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神。。奥,不对就解决了!
#include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int index = 0; //数组下标索引 int indexEnd = 0; //目标索引 int count = 0; //计数器 int tempCount = 0; //临时计数器 int arrayNum[100] = { 0 }; //零不算输入元素,所以结尾判零即可 cout << "请输入一个数字序列,数字间以空格隔开,用0表示输入结束:" << endl; while((cin >> arrayNum[index])&&arrayNum[index]!=0) ++index; index = 0; while (arrayNum[index] != 0) { //cout << arrayNum[index] << endl; if (arrayNum[index + 1] != 0) { if (arrayNum[index] == arrayNum[index + 1]) { tempCount++; } else { if (tempCount > count) { count = tempCount; indexEnd = index; } tempCount = 0; } } ++index; } cout << "输入数字序列为:" << endl; index = 0; while (arrayNum[index] != 0) { cout << arrayNum[index]; ++index; } cout << endl; cout << "最大的平台是:" << endl; cout << arrayNum[indexEnd] <<endl; cout << "连续次数为:" << endl; cout << count + 1 << endl; getchar(); getchar(); return 0; }
实验结果:
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, int
, index
, 元素
, 平台
, 一个
连续最长
,以便于您获取更多的相关知识。