您的位置:首页 > 其它

noi——找最大数序列

2017-12-03 13:33 148 查看

描述

输入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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: