您的位置:首页 > 运维架构

ACM Open Judge:2.圆盘找数

2015-07-13 15:23 453 查看

2.圆盘找数

题目描述

如图找出3个连续数(紧挨着的3个数),它们相加和最大,再找出和数最小的3个数,试编一程序求之。

输入

输入的第一行有一个整数n,表示测试数据的组数。接下来有n行,每行有若干个整数a1,a2,…,am,(-10000≤a1,a2,…, am ≤ 10000),他们表示一个圆盘上的m个数,(m≤1000)。

输入直到文件输入结束。

输出

对输入中每一行表示的圆盘,在一行上先输出“Case #:”,其中“#”是测试数据的行编号(从1开始),接着在下面的一行上分别输出这三个相邻数字之和中最大和与最小和,以及取得最大和与最小和对应的那三个相邻数字的第一个数的下标MaxIndex与MinIndex。注:数的下标约定从1开始编起。

假如这些数不到3个,那么就无法按圆盘方式计算,此时输出“No maximal and minimal!”

样例输入

2
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, minimum = 13, MaxIndex = 12, MinIndex = 2
Case 2:
No maximal and minimal!


源代码(C语言)

//Programmed by Daphne 2015.7.7
//E-mail: Daphne.Chang@foxmail.com
#include <stdio.h>

int main()
{
int a[1005],k,count=1;
scanf("%d",&k);
int max,min,maxIndex,minIndex;
while(k--)
{
int n=0;
while(1)
{
scanf("%d",&a
);
n++;
if(getchar()=='\n') break;
}
/*  for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");*/
printf("Case %d:\n",count++);
if(n<3)
{
printf("No maximal and minimal!\n");
}
else
{
max=a[0]+a[1]+a[2];
min=a[0]+a[1]+a[2];
maxIndex=0;
minIndex=0;
for(int i=1;i<n-2;i++)
{
if((a[i]+a[i+1]+a[i+2])>max)
{
max=a[i]+a[i+1]+a[i+2];
maxIndex=i;
}
if((a[i]+a[i+1]+a[i+2])<min)
{
min=a[i]+a[i+1]+a[i+2];
minIndex=i;
}

}
if(a[n-2]+a[n-1]+a[0]>max)
{
max=a[n-2]+a[n-1]+a[0];
maxIndex=n-2;
}
if(a[n-2]+a[n-1]+a[0]<min)
{
min=a[n-2]+a[n-1]+a[0];
minIndex=n-2;
}
if(a[n-1]+a[0]+a[1]>max)
{
max=a[n-1]+a[0]+a[1];
maxIndex=n-1;
}
if(a[n-1]+a[0]+a[1]<min)
{
min=a[n-1]+a[0]+a[1];
minIndex=n-1;
}
printf("maximum = %d, minimum = %d, MaxIndex = %d, MinIndex = %d\n",max,min,maxIndex+1,minIndex+1);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 算法