noi——找最大数序列

描述

输入n行,每行不超过100个无符号整数,无符号数不超过4位。请输出最大整数以及最大整数所在的行号(行号从1开始)。如果该数据在多个行中出现,则按从小到大输出相应行号,行号之间以一个逗号分开。

输入 一行输入一个正整数n(n <= 30)。
之后的n行,每行包含不超过100个无符号整数,整数之间以一个逗号分开。 输出 第一行:最大整数;
第二行:最大整数所在的行编号,逗号间隔。 样例输入
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



两个双for循环noiAC,学校的RE:

#include<stdio.h>
#include<string.h>
int main()
{
    int m=0;
    int n,nn;
    int i=0;
    int a[35][105]= {0};
    int flag;
    while(~scanf("%d",&n))
    {
        flag=0;
        nn=n;
        while(n>0)
        {
            scanf("%d",&a[nn-n][i]);
            if(i==0&&n==nn)
            {
                m=a[nn-n][i];
            }
            else
            {
                if(m<a[nn-n][i])
                {
                    m=a[nn-n][i];
                }
            }
            if(getchar()=='\n')
            {
                n--;
                i=0;
                continue;
            }
            i++;
        }
        printf("%d\n",m);
        for(int ii=0; ii<nn; ii++)
        {
            for(int j=0; j<105; j++)
            {
                if(a[ii][j]==m)
                {

                    if(flag==0)
                    {
                        printf("%d",ii+1);
                        flag++;
                    }
                    else
                    {
                        printf(",%d",ii+1);
                    }
                    break;
                }

            }
        }
        printf("\n");
        memset(a,0,sizeof(a));
        m=0;
        i=0;
    }
    return 0;
}

别人的代码:http://www.cnblogs.com/huashanqingzhu/p/3474575.html

没必要记录输入的所有数据

每行求最大值并记录于数列中

当下一行出现更大的最大值,清空数列,重新记录

每一行最后的一个数据另外进行判断,作为本行最后一个数据,接下来便进入下一个i

#include<stdio.h>
#include<memory.h>
int main()
{
    int n,i,a[31];
    int max,t,len;
    char ch;
    int first;
    while(~scanf("%d",&n))
    {
        memset(a,0,sizeof(a));
        max=-1;
        len=0;
        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\n",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("\n");
    }

    return 0;
}









猜你喜欢

转载自blog.csdn.net/qq_32259423/article/details/78701146