第18关:任务06-08-18 餐饮服务质量调查打分
#include <stdio.h>
int uu(int a1,int a2,int a3,int a4,int a5){
int x,b;
x=((a1>a2)?a1:a2)>a3?((a1>a2)?a1:a2):a3; //选出最大数,最大数即为行数。
b=((x>a4)?x:a4)>a5?((x>a4)?x:a4):a5;
return b;
}
int main(){
int a;
scanf("%d",&a);
for(int i=1;i<=a;i++){
int v,a1=0,a2=0,a3=0,a4=0,a5=0;
scanf("%d",&v);
for(int k=1;k<=v;k++){
int b;
scanf("%d",&b);
switch(b){
case 1:a1++;break;
case 2:a2++;break;
case 3:a3++;break;
case 4:a4++;break;
case 5:a5++;break;
}
}
int r[5];
r[0]=a1,r[1]=a2,r[2]=a3,r[3]=a4,r[4]=a5;
int j=uu(a1,a2,a3,a4,a5),o[10],m=0;
for(int u=j;u>=1;u--){
o[m]=0;
if(r[4]>=u){ //得到一行有多少'*',以便以后判断好换行。
o[m]++;
r[4]--;}
if(r[3]>=u){
o[m]++;
r[3]--;}
if(r[2]>=u){
o[m]++;
r[2]--;}
if(r[1]>=u){
o[m]++;
r[1]--;}
if(r[0]>=u){
o[m]++;
r[0]--;}
m++;
}
m=0;
for(j;j>=1;j--,m++){
if(a1==j){
o[m]--;
printf("*");
a1--;
if(o[m]==0){
printf("\n");
continue;
}
printf(" ");
}
else
printf(" ");
if(a2==j){
o[m]--;
printf("*");
a2--;
if(o[m]==0){ //处理输出。
printf("\n");
continue;
}
printf(" ");
}
else
printf(" ");
if(a3==j){
o[m]--;
printf("*");
a3--;
if(o[m]==0){
printf("\n");
continue;
}
printf(" ");
}
else
printf(" ");
if(a4==j){
o[m]--;
printf("*");
a4--;
if(o[m]==0){
printf("\n");
continue;
}
printf(" ");
}
else
printf(" ");
if(a5==j){
printf("*");
a5--;}
printf("\n");
}
printf("1 2 3 4 5\n");
}
return 0;
}
100
- 任务要求
- 评论1
任务描述
在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。
输入格式:
第1个整数repeat为数据组数,一共有repeat组数据,请分别处理每组数据,每组数据输出一个直方图。
接下来为repeat组数据,每组数据的第1个数为打分人数n,接下来为这n个人的n个打分。
输出格式:
按输出样例的样式输出结果。
输入样例:
1
10
1 2 2 3 3 5 2 2 3 5
输出样例:
*
* *
* * *
* * * *
1 2 3 4 5
输入样例:
2
10
1 1 1 1 1 2 3 4 5 5
20
1 1 1 2 2 2 3 3 3 4 5 1 2 3 4 2 2 3 5 2
输出样例:
*
*
*
* *
* * * * *
1 2 3 4 5
*
*
* *
* * *
* * *
* * * * *
* * * * *
1 2 3 4 5
开始你的任务吧,祝你成功!