题目描述
输入一个二维数组M[12][12],根据输入的要求,求出二维数组中某一行的元素的平均值或元素的和。
输入格式
第一行输入整数L,表示所求的具体行数(行数从0开始计数)。
第二行包含一个大写字母,若为’S’,则表示需要求出第 L 行的元素的和,若为’M’,则表示需要求出第 L 行的元素的平均值。
接下来12行,每行包含12个用空格隔开的浮点数,表示这个二维数组,其中第 i+1 行的第 j+1 个数表示数组元素M[i][j]。
输出格式
输出一个数,表示所求的平均数或元素的和的值,保留一位小数。
数据范围
−100.0≤M[i][j]≤100.0
输入样例:
7
S
8.3 -9.4 -5.6 9.9 2.2 3.2 6.9 7.7 -2.9 -6.3 3.9 -1.4
-0.5 4.3 -0.3 2.3 0.7 -3.1 -6.3 5.7 -7.7 -3.7 9.7 3.8
5.8 -9.1 3.5 7.0 2.5 -2.3 6.9 2.7 5.8 -4.6 -7.8 4.3
-1.7 -8.9 -2.6 7.5 -9.6 6.4 -4.7 -8.0 0.6 6.7 -1.8 -0.4
-9.8 8.9 -3.8 -2.1 5.8 -9.4 1.3 6.3 -1.3 -6.3 -6.6 8.8
-6.3 -7.2 -6.3 -5.9 6.2 9.3 2.0 -4.3 2.7 3.6 -4.6 8.7
3.8 7.4 8.7 -2.8 6.0 -9.2 1.9 3.1 -7.2 -6.0 9.7 -8.4
-9.8 6.6 8.6 2.3 1.1 -2.9 6.6 -1.5 2.1 -5.1 6.4 -7.5
-0.6 -1.6 9.5 -6.6 3.0 3.4 -7.5 -7.9 3.1 2.0 1.7 -7.6
-9.0 9.4 6.6 -0.2 1.4 6.5 8.6 2.0 -1.3 0.2 4.0 -2.4
-7.3 -6.3 -8.6 -7.5 8.5 1.4 -3.3 7.1 0.8 3.3 3.0 0.1
3.3 9.0 1.7 5.2 -3.7 8.9 3.8 -7.4 -2.8 0.6 -2.4 7.1
输出样例:
6.9
直接用cin()读入数据
因为C++中cin()自动过滤掉空格和回车,所以可以不用考虑。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
double M[12][12];
int l;
char c;
cin>>l>>c;
for(int i=0;i<12;++i)
for(int j=0;j<12;++j)
cin>>M[i][j];
float sum;
for(int i=0;i<12;++i)
sum+=M[l][i];
if(c=='S') printf("%.1f",sum);
else printf("%.1f",sum/12.0);
return 0;
}
使用scanf()
如果这道题要用scanf()输入,由于先输入7,然后是回车,再输入字符S,如果“%d%c”的话,字符读入的将是空格。所以要用“\n”注释掉。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
double M[12][12];
int l;
char c;
scanf("%d\n%c%",&l,&c);
for(int i=0;i<12;++i)
for(int j=0;j<12;++j)
cin>>M[i][j];
float sum;
for(int i=0;i<12;++i)
sum+=M[l][i];
if(c=='S') printf("%.1f",sum);
else printf("%.1f",sum/12.0);
return 0;
}
多打了一个%
我想问一下这个M[l][i] 这个l就是l行吗,为啥不是l-1行
l从0开始计数
但是题里面说“算第l行”,第l行是M[l-1][j]啊?