解题思路:
1.由题可知,需要找到几行数中最大的值,并从小到大输出所在行的编号,因为是一个矩阵,所以可以想到用二维数组
2.不同的是,这道题每两个数之间是用逗号分割的,并不是空格,我们无法用常规的cin输入来存入二维数组,所以可以想到把逗号和换行符也当做一个字符型的变量输入,然后只取我们想要的数字即可
3.行数是已知的,为n行,但是每行的数据量是不固定的,所以可以想到,外层循环利用for循环,内层用while循环,当接收到换行符的时候,跳出while循环,开始存入下一行
4.输入的时候,因为cin是无法获取到换行符的,所以要用scanf函数来输入,即scanf("%d%c",&x,&y);如果y是逗号的话,将x的值赋值到二维数组中,否则的话,赋值之后,跳出循环,从下一行开始输入,即列号变为1,并且将本行的长度保存到另外一个数组中,方便接下来遍历数组
5.遍历二维数组,找到最大值输出
#include<bits/stdc++.h>
using namespace std;
int a[35][105];//定义二维数组存放数据
int b[35];//定义一维数组,定义每行的数据个数
int main()
{
int n,k,x,max=0;
char ch;//定义字符变量
cin>>n;
for(int i=1;i<=n;i++)
{
k=0;//统计每行的个数,每行计数前要清零
while(1)
{
scanf("%d%c",&x,&ch);//输入该数据和字符
if(ch==',')//如果字符是逗号
{
k++;
a[i][k]=x;//将该数据存放到二维数组中
}
else//如果字符不是逗号
{
a[i][++k]=x;//将该数据放入到二维数组中
b[i]=k;//将这行的个数存放到b数组中
break;//结束内循环,开始下一行的统计
}
}
}
for(int i=1;i<=n;i++)//遍历二维数组中的每个元素值
{
for(int j=1;j<=b[i];j++)
{
if(a[i][j]>max)//找到最大值
max=a[i][j];
}
}
cout<<max<<endl;//输出最大值并换行
bool flag=0;//打标记
for(int i=1;i<=n;i++)//遍历二维数组的每个元素值
{
for(int j=1;j<=b[i];j++)
{
if(a[i][j]==max)//如果该行有的数据大于最大值
{
if(flag==0)//打标记为是否输出逗号
{
cout<<i;//输出该行的编号
flag=1;
}
else
cout<<","<<i;
break;
}
}
}
return 0;
}