机试试题及代码.docx
- 文档编号:22781669
- 上传时间:2023-04-27
- 格式:DOCX
- 页数:49
- 大小:26.90KB
机试试题及代码.docx
《机试试题及代码.docx》由会员分享,可在线阅读,更多相关《机试试题及代码.docx(49页珍藏版)》请在冰豆网上搜索。
机试试题及代码
机试试题及代码
1题目描述:
给出年分m和一年中的第n天,算出第n天是几月几号。
输入:
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出:
可能有多组测试数据,对于每组数据,
按yyyy-mm-dd的格式将输入中对应的日期打印出来。
样例输入:
20003
200031
200040
200060
200061
200160
样例输出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
代码实现
#include"stdio.h"
intyear1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
intyear2[12]={31,28,31,30,31,30,31,31,30,31,30,31};
voidmain(){
intyear,mount;
while(scanf("%d",&year)!
=EOF){
scanf("%d",&mount);
if(year%400==0||(year%100!
=0&&year%4==0))
{inttemp,flag=mount;
intmonth=1,day;
for(inti=0;year1[i] {mount=mount-year1[i]; } day=mount; month=i; printf("%d-%.2d-%.2d",year,month+1,day); } else{ inttemp,flag=mount; intmonth=1,day; for(inti=0;year2[i] {mount=mount-year2[i]; } day=mount; month=i; printf("%d-%.2d-%.2d",year,month+1,day); }}} 2 题目描述: Excel可以对一组纪录按任意指定列排序。 现请你编写程序实现类似功能。 对每个测试用例,首先输出1行“Casei: ”,其中i是测试用例的编号(从1开始)。 随后在N行中输出按要求排序后的结果,即: 当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3 时,按成绩的非递减排序。 当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。 输入: 测试输入包含若干测试用例。 每个测试用例的第1行包含两个整数N(N<=100000)和C,其中N是纪录的条数,C是指定排序的列号。 以下有N行,每行包含一条学生纪录。 每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0,100]内的整数)组成,每个项目间用1个空格隔开。 当读到N=0时,全部输入结束,相应的结果不要输出。 输出: 对每个测试用例,首先输出1行“Casei: ”,其中i是测试用例的编号(从1开始)。 随后在N行中输出按要求排序后的结果,即: 当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3 时,按成绩的非递减排序。 当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。 样例输入: 31 000007James85 000010Amy90 000001Zoe60 42 000007James85 000010Amy90 000001Zoe60 000002James98 43 000007James85 000010Amy90 000001Zoe60 000002James90 00 样例输出: Case1: 000001Zoe60 000007James85 000010Amy90 Case2: 000010Amy90 000002James98 000007James85 000001Zoe60 Case3: 000001Zoe60 000007James85 000002James90 000010Amy90 代码 #include #include #include structstudent {charid[7]; charname[9]; intscore; }; intmain() { intn,c,i,j; structstudent*stu,temp; while(scanf("%d%d",&n,&c)! =EOF) {stu=(student*)malloc(n*sizeof(student)); for(i=0;i {scanf("%s%s%d",&stu[i].id,&stu[i].name,&stu[i].score); } switch(c) {case1: {for(i=0;i {for(j=i;j if(strcmp(stu[i].id,stu[j].id)>0) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } printf("Case1: \n"); for(i=0;i printf("%s%s%d\n",stu[i].id,stu[i].name,stu[i].score); break; } case2: {for(i=0;i {for(j=i;j {if(strcmp(stu[i].name,stu[j].name)>0) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } if(strcmp(stu[i].name,stu[j].name)==0) {if(strcmp(stu[i].id,stu[j].id)>0) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } } printf("Case2: \n"); for(i=0;i printf("%s%s%d\n",stu[i].id,stu[i].name,stu[i].score); break; } case3: {for(i=0;i {for(j=i;j {if(stu[i].score>stu[j].score) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } if(stu[i].score==stu[j].score) {if(strcmp(stu[i].id,stu[j].id)>0) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } } printf("Case3: \n"); for(i=0;i printf("%s%s%d\n",stu[i].id,stu[i].name,stu[i].score); break; } } } return0; } 题目描述: 对输入的n个数进行排序并输出。 输入: 输入的第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。 每组测试数据的结果占一行。 样例输入: 4 1432 样例输出: 1234 #include #include voidmain() { intn,i,j,t; while(scanf("%d",&n)! =EOF){ int*a; a=(int*)malloc(n*sizeof(int)); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { for(j=i+1;j { if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } } for(i=0;i printf("%d",a[i]); printf("\n");} } 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。 输入: 测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。 每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。 输出: 将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。 然后输出学生信息,按照如下格式: 姓名年龄成绩 样例输入: 3 abc2099 bcd1997 bed2097 样例输出: bcd1997 bed2097 abc2099 #include #include #include structnode { charname[101]; intage; intscore; }; intmain() { intn,i,j; structnodea[1001],tmp; while(scanf("%d",&n)! =EOF) { for(i=0;i scanf("%s%d%d",&a[i].name,&a[i].age,&a[i].score); for(i=0;i { for(j=0;j { if(a[j].score>a[j+1].score) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; }//if elseif(a[j].score==a[j+1].score) { if(strcmp(a[j].name,a[j+1].name)>0) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; }//if elseif(strcmp(a[j].name,a[j+1].name)==0) { if(a[j].age>a[j+1].age) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; }//if }//elseif }//elseif }//for }//for for(i=0;i printf("%s%d%d\n",a[i].name,a[i].age,a[i].score); }//while return0; } 题目描述: 输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。 输入: 输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。 接下来的一行有N个整数。 输出: 可能有多组测试数据,对于每组数据, 第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。 第二行将排序的结果输出。 样例输入: 4 1342 样例输出: 4 123 #include intmain(){ inti,n,t,j,a[1000]; while(scanf("%d",&n)! =EOF){ for(i=0;i scanf("%d",&a[i]); t=a[i]; j=i-1; while(j>=0&&a[j]>t){a[j+1]=a[j];j--;} a[j+1]=t; } printf("%d\n",a[n-1]); if(n==1)printf("-1\n"); elsefor(i=0;i printf("%d",a[i]); if(i! =n-2)printf(""); elseprintf("\n");} } return0; } 题目描述: 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。 输入: 测试数据有多组,输入字符串。 输出: 对于每组输入,输出处理后的结果。 样例输入: bacd 样例输出: abcd #include"stdio.h" #include"string.h" voidmain(){ chara[200]; chartem; while(scanf("%s",&a)! =EOF) { intlen=strlen(a); for(inti=0;i for(intj=i+1;j if(a[i]>a[j]) { tem=a[i]; a[i]=a[j]; a[j]=tem; } for(intm=0;m printf("%c",a[m]); printf("\n"); } } 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入: 20110412 20110422 样例输出: 11 #include #include #include intcountDates(int,int,int); voidmain() { inty1,m1,d1,y2,m2,d2; intdays1,days2,day; while(scanf("%4d%2d%2d",&y1,&m1,&d1)! =EOF) { scanf("%4d%2d%2d",&y2,&m2,&d2); days1=countDates(y1,m1,d1); days2=countDates(y2,m2,d2); if(days1>days2) { day=days1-days2+1; }else { day=days2-days1+1; } printf("%d\n",day); } } intcountDates(intyear,intmonth,intday) { intnumber,i; intm[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if((year%4==0)&&(year%100! =0)||(year%400==0)) { m[1]=29; } number=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;//统计闰年的天数加上平年 for(i=0;i { number+=m[i]; } number+=day; returnnumber; } 代码2 //先整体求天数最后再统计闰年的天数 #include intm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; intleap(intn) { if(n%4==0&&n%100! =0||n%400==0) return1; else return0; } intcomday(inty1,intm1,intd1) { intsum=0,i; for(i=1;i { sum+=m[i]; } sum+=d1; if(leap(y1)&&m1>2) sum++; returnsum; } intcompute(inty,intm,intd) { intsum=0; inti; sum=(y-1)*365+comday(y,m,d); for(i=1;i if(leap(i)) sum++; returnsum; } intmain() { chars1[10],s2[10]; inty1,y2,m1,m2,d1,d2,i; while(scanf("%4d%2d%2d",&y1,&m1,&d1)! =EOF) { scanf("%4d%2d%2d",&y2,&m2,&d2); printf("%d\n",compute(y2,m2,d2)-compute(y1,m1,d1)+1); } return0; } 题目描述: WenowusetheGregorianstyleofdatinginRussia.Theleapyearsareyearswithnumberdivisibleby4butnotdivisibleby100,ordivisibleby400. Forexample,years2004,2180and2400areleap.Years2004,2181and2300arenotleap. Yourtaskistowriteaprogramwhichwillcomputethedayofweekcorrespondingtoagivendateinthenearestpastorinthefutureusingtoday’sagreementaboutdating. 输入: Thereisonesinglelinecontainsthedaynumberd,monthnameMandyearnumbery(1000≤y≤3000).ThemonthnameisthecorrespondingEnglishnamestartingfromthecapitalletter. 输出: OutputasinglelinewiththeEnglishnameofthedayofweekcorrespondingtothedate,startingfromthecapitalletter.Allotherlettersmustbeinlowercase. 样例输入: 9October2001 14October2001 样例输出: Tuesday Sunday 提示: MonthandWeeknameinInput/Output: January,February,March,April,May,June,July,August,September,October,November,December Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday //先算出总的天数,由总天数再除以7就得是第几天 #include #include intconvert(chars[]) { charmonth[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"}; for(inti=0;i<12;++i) if(strcmp(s,month[i])==0) return(i+1); } intmain(void) { intday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; charweek[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; intD,Y; charm[10]; while(scanf("%d%s%d",&D,m,&Y)! =EOF) { inti,M=convert(m),e=(Y-1)*365;//e代表总的天数 for(i=1;i { if((i%4==0&&i%100! =0)||i%400==0) ++e; } for(i=1;i e+=day[i]; if(((Y%4==0&&Y%100! =0)||Y%400==0)&&M>2) ++e; e+=D; printf("%s\n",week[e%7]); } return0; } 题目描述: 输入年、月、日,计算该天是本年的第几天。 输入: 包括三个整数年(1<=Y<=3000)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试试 代码