1、C语言作业2. 集合排序(选做)成绩: 5 / 折扣: 0.8 现有若干个集合的数据,每个数据集合可以自选一个指标参加排序。这些指标包含如下四种: Min ,取集合中元素的最小值 Max ,取集合中元素的最大值 Mean ,取集合中元素的平均值,平均值的计算公式为: (V1+V2+Vn) / n Median ,取集合中元素的中值,中值的计算公式为: (Vmin+Vmax) / 2 读入数据后,请根据各个集合选择的指标对这些集合进行降序排列,每个集合内的元素请升序排列。 输入: 每行一个集合。 内为该集合选取的用于集合间排序的指标。随后为集合内各个元素,元素个数不定,以空格分隔。 若输入行的第
2、一个字符为“*”,则表示输入数据结束。输出: 每行输出一个集合。 内为计算出该集合的排序指标值,随后为该集合的各个元素的升序排列。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1.Max8315 2.Min910127 3.Median24 4.Mean302010 5.*以文本方式显示 1.20102030 2.153815 3.324 4.11279101秒 64M 0 测试用例 2以文本方式显示 1.Max1234492565763023 2.Mean1781349323256723322 以文本方式显示 1.876861211993292123321234487
3、686 2.5001735226699999 1秒 64M 0 3.Mean3123854352343227999 4.Max8768611991233212344123292 5.Min99128353766 6.Median84431453 7.Median99999352266 8.Min43423255 9.Median0 10.*3.35762327318543599923432 4.325532554342 5.3440391223256576344 6.1881233232178322349567 7.7434384145 8.339537669128 9.00测试用例 3以文本
4、方式显示 1.Mean88888 2.*以文本方式显示 1.88888888881秒 64M 0 #include #include #include typedef struct line char type8; int typeValue; int data100; int n_data; line; int stringToInt(char str) int returnValue=0; int n=strlen(str); for(int i=0;istrlen(str);i+) returnValue=returnValue+(int)stri-48)*pow(10.0,-n); r
5、eturn returnValue; void inputToLineData(line * l,char input) int n,i;/line length n=strlen(input); for(i=0;itypei=inputi+1; l-typei=0; l-n_data=0; int numStart=i+2; char str10010; int m=0,j=0; for(i=numStart;in_data+; else strjm+=inputi; strjm=0; l-n_data+; l-data0=0; for(i=0;in_data;i+) l-datai=str
6、ingToInt(stri); void sort(int data,int n) int i,j,k; for(i=0;in;i+) for( j=0;jdataj+1) k=dataj; dataj=dataj+1; dataj+1=k; int getTypevalue(line l) int i,j,k; if(strcmp(l.type,Max)=0) int Max; Max=l.data0; for(i=0;iMax) Max=l.datai; return Max; if(strcmp(l.type,Min)=0) int Min; Min=l.data0; for(i=0;i
7、l.n_data;i+) if(l.dataiMin) Min=l.datai; return Min; if(strcmp(l.type,Median)=0) int Max; Max=l.data0; for(i=0;iMax) Max=l.datai; int Min; Min=l.data0; for(i=0;il.n_data;i+) if(l.dataiMin) Min=l.datai; return (Max+Min)/2; if(strcmp(l.type,Mean)=0) int sum=0; for(i=0;i1) inputToLineData(&Linei,input)
8、; i+; while(strcmp(input,*)!=0); int amount=i; for(i=0;iamount;i+) sort(Linei.data,Linei.n_data); for(i=0;iamount;i+) Linei.typeValue=getTypevalue(Linei); line temp; for(i=0;iamount;i+) for(j=0;jamount-1;j+) if(Linej.typeValueLinej+1.typeValue) temp=Linej; Linej=Linej+1; Linej+1=temp; for(i=0;iamoun
9、t;i+) printf(%d,Linei.typeValue); for(j=0;jLinei.n_data;j+) if(jLinei.n_data-1) printf(%d ,Linei.dataj); else printf(%d,Linei.dataj); printf(n); 3. 二叉排序树(选做)成绩: 5 / 折扣: 0.8 撰写一个程序,能够构建字符串型的二叉排序树并在二叉排序树中查找节点。 所谓二叉排序树,简而言之,是一个每个节点可指向 0、1 或 2 个节点的递归的数据结构。最上层的一个节点称为树根。二叉排序树服从凡是比当前节点小的值都在其左下方,比当前节点大的值都在其
10、右下方的规律。该规律不仅适用于树的局部,也适用于整棵二叉排序树。 例如,在给定 Kiwi, Banana, Apple, Melon, Berry 的输入字符串的顺序下,以此构建二叉排序树的过程为:建树后,请根据给定的字符串,查找树中是否有该节点。若有,返回其节点在所在的层次数(根节点Kiwi的层次定义为0);若无,返回“Not Found”。输入: 每行一个字符串,作为要插入二叉排序树的值。若单独一个*字符占一行,则表明用于建树的字符串输入数据结束。随后以Search开始的若干行,代表要在树中查找某个字符串值,用于查找的字符串紧跟其后。若输入行的第一个字符为“#”,则表示输入数据结束。输出:
11、 输出每个要查找的值所在的层次数。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1.Kiwi 2.Banana 3.Apple 4.Melon 以文本方式显示 1.Berry-2 2.Strawberry-NotFound1秒 64M 0 5.Berry 6.* 7.SearchBerry 8.SearchStrawberry 9.#测试用例 2以文本方式显示 1.test 2.* 3.Searchtest 4.Searchtext 5.#以文本方式显示 1.test-0 2.text-NotFound1秒 64M 0 #include#include#includes
12、truct node char date20; struct node *left; struct node *right; int floor;int flag=0;int f(struct node *p,char t) if(p=NULL) return 0; else if(strcmp(p-date,t)=0) printf(%s-%dn,t,p-floor); flag=1; else f(p-left,t); f(p-right,t); int main() struct node *p0,*pnew,*ptemp; p0=(struct node*) malloc (sizeo
13、f (struct node); p0-left=NULL; p0-right=NULL; char temp40; gets(temp); strcpy(p0-date,temp); p0-floor=0; gets(temp); while(temp0!=*) pnew=(struct node*) malloc (sizeof (struct node); pnew-left=NULL; pnew-right=NULL; strcpy(pnew-date,temp); ptemp=p0; for(int i=1;i+) if(strcmp(temp,ptemp-date)0) if(pt
14、emp-right=NULL) ptemp-right=pnew; pnew-floor=i; break; else ptemp=ptemp-right; else if(ptemp-left=NULL) ptemp-left=pnew; pnew-floor=i; break; else ptemp=ptemp-left; /for gets(temp); /while gets(temp); while(temp0!=#) char t40; strcpy(t,&temp8); flag=0; f(p0,t); if(flag=0) printf(%s-Not Foundn,t); ge
15、ts(temp); 1. 配料员(选做)成绩: 5 / 折扣: 0.8背景: 你是一名室内装潢工程队的配料员。你的伙伴们在铺大理石地砖的时候,习惯于按照以下两种之字形的遍历顺序之一:学了 C 语言以后,你决定编写一个程序。无论你的伙伴们想要以何种遍历顺序铺设任何图案的任何大小的地砖方阵,你的程序都能正确地生成一个线性遍历序列,指示你每次该递给他们什么图案的地砖。输入: 首行为需要遍历的地砖矩阵的个数。第二行为第一个矩阵的维数(其中的 x 是小写字母 x,前后各有一个空格)。如果是一个 N 维的矩阵,则接下来的 N 行每一行为矩阵该行各列的元素,整型,以空格分隔,每一个整数代表一种基本图案的地砖
16、。随后的一行为该矩阵遍历的模式,只能为 TL-BR 或者 TR-BL 两者之一。若有多个矩阵,则从下一行起重复上述的输入模式。输出: 按顺序输出所需原料的编号。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1.1 2.4x4 3.1234 4.5678 5.1234 6.5678 7.TL-BR以文本方式显示 1.1,2,5,1,6,3,4,7,2,5,6,3,8,4,7,81秒 64M 0 测试用例 2以文本方式显示 1.2 2.4x1 3.1 4.2 5.3 6.4 7.TL-BR 8.4x1 9.1 10.2 11.3 12.4 13.TR-BL以文本方式显示 1
17、.1,2,3,4 2.1,2,3,41秒 64M 0 测试用例 3以文本方式显示 1.2 2.1x1 3.0 4.TL-BR 5.1x1 6.5 7.TR-BL以文本方式显示 1.0 2.51秒 64M 0 #includeint x5050;void change(int *a,int *b) int temp; temp=*a; *a=*b; *b=temp;void fun(int a,int b) for(int i=0;ia;i+) for(int j=0;jb/2;j+) int temp; temp=xij; xij=xib-j-1; xib-j-1=temp; int main
18、() int n; scanf(%d,&n); while(n-!=0) for(int i=0;i50;i+) for(int j=0;j50;j+) xij=-1; int a,b; char tempchar6; scanf(%d %c %d,&a,&tempchar0,&b); /input for(int i=0;ia;i+) for(int j=0;jb?a:b; int i,j; max=max/2*2+1; printf(%d,x00); for(int p=1;p=0;i+,j-) if(xij!=-1) printf(,%d,xij); for(i=p+1,j=0;i=0;
19、i-,j+) if(xij!=-1) printf(,%d,xij); for(int p=1;pmax-1;p+=2) for(i=p,j=max-1;imax;i+,j-) if(xij!=-1) printf(,%d,xij); for(i=max-1,j=p+1;jmax;i-,j+) if(xij!=-1) printf(,%d,xij); printf(n); 50 猜猜我是谁成绩: 5 / 折扣: 0.8在指定的文本文件中包含了我需要的信息,请从指定文件中读取指定的行。如果文件中没有指定的行,则显示“Line No Error.”。如果文件不存在,则显示“File Name Er
20、ror.”。输入:第一行为要以只读方式打开的文本文件名第二行要读取的行号(从1开始)输出:文件中指定行号的内容(完整一行的内容)数据文件data1.txt 测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 以文本方式显示 无限制 64M 0 1.data1.txt 2.21.ThisisLine2.测试用例 2以文本方式显示 1.data1.txt 2.1以文本方式显示 1.ThisisLine1.无限制 64M 0 测试用例 3以文本方式显示 1.data1.txt 2.10以文本方式显示 1.LineNoError.无限制 64M 0 测试用例 4以文本方式显示 1.d
21、ata.txt 2.2以文本方式显示 1.FileNameError.无限制 64M 0 #include#includeint main() FILE * pf; char name20; scanf(%s,name); pf=fopen(name,r); if(pf=NULL) printf(File Name Error.n); exit(0); int n; scanf(%d,&n); char s20; while(n-) if(fgets(s,20,pf)=NULL) pf=NULL; break; if(pf=NULL) printf(Line No Error.n); else
22、 printf(%s,s);H18 恭喜发财 利是窦来(选做)成绩: 5 / 折扣: 0.8在中国,过春节时人们有给孩子压岁钱(粤语称为利是)的习俗。最早的压岁钱出现于汉代,又叫压胜钱,并不在市面上流通,而是铸成钱币形式的玩赏物,有避邪的功能。钱币正面一般铸有“万岁千秋”、“去殃除凶”等吉祥话和龙凤、龟蛇、双鱼等吉祥图案。据说嘉兴府有一户姓管的人家,夫妻老年得子,十分珍爱。在年三十晚上,为防止“祟”来侵扰 一直逗孩子玩,小孩用红纸包了八枚铜钱,包了又拆,拆了又包,睡下以后,包着的八枚铜钱就放在枕边。半夜里,一阵阴风吹过,黑矮的小人正要用他的白手摸孩 子的头,突然孩子枕边迸出一道金光,祟尖叫着逃
23、跑了。于是这件事传扬开来,大家纷纷效仿,在大年夜用红纸包上钱给孩子,祟就不敢再来侵扰了。因而人们把这种钱叫“压祟钱”,“祟”与“岁”发音相同,日久天长,就被称为 “压岁钱”了。现在有 N 个人,他们都有小孩,春节来了,他们要发压岁钱给朋友的小孩,而他们自己的小孩也会收到压岁钱。为了简单,他们在发压岁钱的时候,使用以下的计算方法,譬 如某甲有 100 块,它要给另外三个人的小孩发压岁钱,则每个小孩会分到 100/3 = 33 块,剩余的 1 块就不发了。给你这 N 个人的信息,以及他们把压岁钱发给了谁的小孩,请你计算他们每个人的小孩收到的压岁钱和他们发出去的压岁钱的差额是多少。输入第 1 行: 一个整数 N(2 = N = 10)第 2.N+1 行: 每行是一个人名,每个名字不超
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1