对输入的n个整数,按每行m个数输出这些整数,最后输出这批整数的最大值、最小值和平均值。其中1≤m≤n≤100。
输入
单样例。输入的第一行包括两个正整数n和m,分别代表整数个数和每行输出的整数个数。
接下来的一行输入n个整数,整数间用空格隔开,整数不超过int类型取值范围。
输出
输出若干行,前面的n/m+1行输出n个整数,每行m个,最后一行有可能不足m个。数据之间用一个空格分开。
接下来的三行分别输出最大值、最小值和平均值,平均值保留到小数点后6位。
样例输入 Copy
10 4
9 1 42 3 19 7 56 33 2 8
样例输出 Copy
9 1 42 3
19 7 56 33
2 8
max:56
min:1
average:18.000000
#include <stdio.h>
#include <limits.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int i;
int data[100]={0};
for(i=0;i<n;i++)
{
scanf("%d",&data[i]);
}
//先求最值
int min=INT_MAX;
int max=INT_MIN;
for(i=0;i<n;i++)
{
if(data[i]>max)
max=data[i];
if(data[i]<min)
min=data[i];
}
//再求平均值
int count=0;
double aveg;
for(i=0;i<n;i++)
{
count+=data[i];
}
aveg=(double)count/(double)n;
//在进行排序
for(int i=0;i<n/m;i++)
{
for(int j=0;j<m;j++)
printf("%d ",data[i*m+j]);
printf("\n");
}
if(n%m!=0)
{
for(int i=n/m*m;i<n;i++)
printf("%d ",data[i]);
printf("\n");
}
printf("max:%d\n",max);
printf("min:%d\n",min);
printf("average:%.6lf\n",aveg);
return 0;
}
在排序的时候,出现了格式问题!!!
看下面俩代码
for(i=0;i<n/m;i++)
{
int j;
for(j=0;j<m;j++)
{
printf("%d ",data[i*m+j]);
}
printf("\n");
}
for(i=0;i<n%m;i++)
{
printf("%d ",data[(n/m)*m+i]);
}
printf("\n");
还有这个:
for(int i=0;i<n/m;i++)
{
for(int j=0;j<m;j++)
printf("%d ",data[i*m+j]);
printf("\n");
}
if(n%m!=0)
{
for(int i=n/m*m;i<n;i++)
printf("%d ",data[i]);
printf("\n");
}
第一个代码出现了格式问题,为什么呢?
这是因为:当n%m=0的时候
for(i=0;i<n/m;i++)
{
int j;
for(j=0;j<m;j++)
{
printf("%d ",data[i*m+j]);
}
printf("\n");
}
for(i=0;i<n%m;i++)//该for不会执行
{
printf("%d ",data[(n/m)*m+i]);
}
printf("\n");但是这个回车会执行,就导致会多一个回车,格式出错