/*===================================== 找最大数序列 总时间限制: 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\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; }