OpenJudge计算概论-找最大数序列

/*=====================================
找最大数序列
总时间限制: 1000ms 内存限制: 65536kB
描述
输入n行(n 不大于 30),每行不超过100个无符号整数,无符号数不超过4位。请输出最大整数以及最大整数所在的行号(行号从1开始单调递增)。如果该数据在多个行中出现,则按从小到大输出相应行号,行号之间以逗号间隔。
输入
n和之后的n行数据
输出
第一行:最大整数;
第二行:最大整数所在的行编号,逗号间隔。
样例输入
6
1,3,5,23,6,8,14
20,22,13,4,16
23,12,17,22
2,6,10,9,3,6
22,21,20,8,10
22,1,23,6,8,19,23
样例输出
23
1,3,6

解析:
这个题目主要需要解决输入和输出的问题。
输入:
那n行数据不需要用数组来存储。输入时每次输入一个数和一个字符类型的逗号。
判定输入的字符是否是逗号来决定是否该结束这一行的输入。 
但是要注意这样一来,可能每一行的最后一次 输入需要特别处理。 

记录最大值所在的行要用一维数组。
但是在记录最大值所在行时必须注意:
新发现的最大值与原最大值相等时,要检查上一次存储的最大值的行与本次需
要存储的最大值的行是否在同一行。 假如真在同一行则需要忽略当前发现的
这个最大值。 
======================================*/
#include<stdio.h>
int main()
{
    int n,i,a[31];
    int max=-1,t,len=0;
    char ch;
    int first;
    freopen("5.in","r",stdin);
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
    {
        scanf("%d%c",&t,&ch);
        while(ch==',')
        {
            if(t>max)//发现新的最大值 
            {
                max=t;//记录最大值 
                len=0;//发现新的最大值,要重置数组下标 
                a[len]=i;//记录最大值的行号 
            }
            else if(max==t)
            {
                if(i!=a[len])//确保同一行里面相同大小的最大数多次出现也只记录一次行号 
                {
                    len++;//下标前移一个单位 
                    a[len]=i;//记录最大值的行号
                }
            }
            ch=' ';//清空ch的值 
            scanf("%d%c",&t,&ch);
        }/**/
        if(t>max)
        {
               max=t;
               len=0;
               a[len]=i;
        }
        else if(max==t)
        {
               if(i!=a[len])
            {
                len++;
                  a[len]=i;
               }
        }
    }
    printf("%d
",max);
    first=1;
    for(i=0;i<=len;i++)
    {//输出行号时注意:题目要求行号从1开始计算。 
        if(first)
        {
            printf("%d",a[i]+1);
            first=0;
        }
           else printf(",%d",a[i]+1);
    }
    printf("
");
    return 0;
}
原文地址:https://www.cnblogs.com/huashanqingzhu/p/3474575.html