高手帮忙做道c++编程题(算法要用循环链表,思路简洁清晰)
最好都有批注圆盘找最大和最小和问题描述如图有一列整数构成一个圈,试找出3个连续数(紧挨着的3个数),它们相加和最大,再找出和数最小的3个数,试编一程序求之。输入输入有若干...
最好都有批注 圆盘找最大和最小和 问题描述 如图有一列整数构成一个圈,试找出3个连续数(紧挨着的3个数),它们相加和最大,再找出和数最小的3个数,试编一程序求之。 输入 输入有若干行。每行有若干个整数a1,a2,…,am,(-10000≤a1,a2,…, am ≤ 10000),他们表示一个圆盘上的m个数,(m≤1000),整数之间有一个或多个空格,行尾无多余空格。 输入直到文件输入结束。 输出 对输入中每一行表示的一个圆盘,在一行上先输出“Case #:”,其中“#”是测试数据的行编号(从1开始),接着在下面的一行上分别输出这三个相邻数字之和中的最大和Maximum、取得最大和对应的那三个相邻数字的第一个数的下标MaxIndex、最小和minimum、以及取得最小和对应的那三个相邻数字的第一个数的下标minIndex,用逗号分隔。格式见输出样例,等号两边无空格,逗号后有一个空格。注:数的下标约定从1开始编起。 假如这些数不到3个,那么就无法按圆盘方式计算,此时输出“No maximal and minimal!” 输入样例 20 1 8 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12 5 1 -2 输出样例 Case 1: Maximum=42, MaxIndex=12, minimum=13, minIndex=2 Case 2: No maximal and minimal!
展开
展开全部
// 以下代码在VC2008下编译测试通过 #include <iostream> using namespace std; int main(void) { int arr[100]; int n; int caseCount = 1; while(cin >> n) { for(int i = 0; i < n; ++i) cin >> arr[i]; if(n < 4) { cout << "No maximal and minimal!" << endl; continue; } int maxinum = 0, mininum = 0; int maxindex = 0, minindex = 0; for(int i = 0; i < 4; ++i) maxinum += arr[i]; mininum = maxinum; int tmax = maxinum, tmin = mininum; for(int i = 1; i < n; ++i) { tmax = tmax - arr[i-1] + arr[(i+3)%n]; if(tmax > maxinum) { maxinum = tmax; maxindex = i; } tmin = tmin - arr[i-1] + arr[(i+3)%n]; if(tmin < mininum) { mininum = tmin; minindex = i; } } cout << "Case " << caseCount++ << ":" << endl; cout << "Maxinum=" << maxinum << ",mininum=" << mininum << ",MaxIndex=" << maxindex+1 << ",minIndex=" << minindex+1 << endl; } return 0; }
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询