Skip to content

Latest commit

 

History

History
109 lines (97 loc) · 3 KB

2.圆盘找数.md

File metadata and controls

109 lines (97 loc) · 3 KB

#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: [email protected]
#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]);
            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;
}