10:找最大数序列
总时间限制: 1000ms 内存限制: 65536kB
描述
输入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
这题的难点是对“,”的处理,和找最大值。
//解法一
#include
#include
char s[35];
int n, x, maxl[35], gmax, id;
int main() {
scanf("%d\n", &n);//若用gets %d后面必须加\n
for (int i = 1; i <= n; i++){
gets(s);
for (char *ss=strtok(s,","); ss; ss=strtok(NULL, ",")){
sscanf(ss, "%d", &x);
if(x > maxl[i]) maxl[i] = x;
}
if (gmax < maxl[i]) gmax = maxl[i], id = i;
}
printf("%d\n%d", gmax, id);
while (++id <= n)
if(gmax == maxl[id])
printf(",%d", id);
return 0;
}
strtok(s,",");//第一个指的是把s中的“,”去掉;
strtok(NULL, ",")//第二个不知道字符串的长度,所以直接用NULL;
sscanf(ss, "%d", &x)//直接将char类型变成int类型
//解法二
#include
#include
#include
using namespace std;
char s[35];
int n,x,a[35],maxn=0,maxi=0,b;
int main(){
scanf("%d\n",&n);
for(int i=1;i<=n;++i){
gets(s);
for(char *ss=strtok(s,",");ss; ss=strtok(NULL,",")){
sscanf(ss,"%d",&x);
a[i]=max(a[i],x);
}
maxi=max(maxi, a[i]);
}
printf("%d\n",maxi);
for(int i=1;a[i-1]!=maxi;i++){
if(a[i]==maxi){
printf("%d",i);
b=i+1;
}
}
for(;b<=n;b++)
if(a[b]==maxi)
printf(",%d",b);
return 0;
}
碰到“,” 先输出第一个然后,剩下的(,%d)输出。