C语言作业8
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 集合排序(选做)
成绩: 5 / 折扣: 0.8
现有若干个集合的数据,每个数据集合可以自选一个指标参加排序。这些指标包含如下四种:
•Min ,取集合中元素的最小值
•Max ,取集合中元素的最大值
•Mean ,取集合中元素的平均值,平均值的计算公式为:(V1+V2+…+Vn) / n •Median ,取集合中元素的中值,中值的计算公式为:(Vmin+Vmax) / 2
读入数据后,请根据各个集合选择的指标对这些集合进行降序排列,每个集合内的元素请升序排列。
输入:
每行一个集合。[ ] 内为该集合选取的用于集合间排序的指标。随后为集合内各个元素,元素个数不定,以空格分隔。
若输入行的第一个字符为“*”,则表示输入数据结束。
输出:
每行输出一个集合。{ }内为计算出该集合的排序指标值,随后为该集合的各个元素的升序排列。
测试输入期待的输出
时
间
限
制
内
存
限
制
额
外
进
程
测
试
用
例
1
以文本方式显示
1.[Max]8 3 15↵
2.[Min]9 10 1 2 7↵
3.[Median]2 4↵
4.[Mean]30 20 10↵
5.*↵
以文本方式显示
1.{20}10 20 30↵
2.{15}3 8 15↵
3.{3}2 4↵
4.{1}1 2 7 9 10↵
1
秒
64
M
测
试
用
例
以文本方式显示
1.[Max]12 344 9 25 65 76 3 0 23↵
2.[Mean]178 1 349 32 32 567 23 322
以文本方式显示
1.{87686}12 1199 3292 12332 12344
87686↵
1
秒
64
M
#include
#include
#include
{
char type[8];
int typeValue;
int data[100];
int n_data;
}line;
int stringToInt(char str[]) {
int returnValue=0;
int n=strlen(str);
for(int i=0;i { returnValue=returnValue+((int)str[i]-48)*pow(10.0,--n); } return returnValue; } void inputToLineData(line * l,char input[]) { int n,i;//line length n=strlen(input); for(i=0;i { if(input[i+1]==']')break; l->type[i]=input[i+1]; } l->type[i]='\0'; l->n_data=0; int numStart=i+2; char str[100][10]; int m=0,j=0; for(i=numStart;i { if(input[i]==' ') . { str[j][m]='\0'; j++; m=0; l->n_data++; } else str[j][m++]=input[i]; } str[j][m]='\0'; l->n_data++; l->data[0]=0; for(i=0;i { l->data[i]=stringToInt(str[i]); } } void sort(int data[],int n) { int i,j,k; for(i=0;i for( j=0;j { if(data[j]>data[j+1]) { k=data[j]; data[j]=data[j+1]; data[j+1]=k; } } } int getTypevalue(line l) { int i,j,k; if(strcmp(l.type,"Max")==0) { int Max; Max=l.data[0]; for(i=0;i { if(l.data[i]>Max) Max=l.data[i]; } return Max; } if(strcmp(l.type,"Min")==0) { int Min; Min=l.data[0]; for(i=0;i { if(l.data[i]