C语言作业5.docx
《C语言作业5.docx》由会员分享,可在线阅读,更多相关《C语言作业5.docx(35页珍藏版)》请在冰豆网上搜索。
C语言作业5
28组成最大数
成绩:
10/折扣:
0.8
任意输入一个自然数,输出该自然数的各位数字组成的最大数。
例如,输入1593,则输出为9531。
输入:
自然数n
输出:
各位数字组成的最大数
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.1593↵
以文本方式显示
1.9531↵
1秒
64M
0
#include
#include
intmain(){
chara[10000];
intx[10]={0};
scanf("%s",a);
intn=strlen(a);
for(inti=0;ifor(inti=9;i>=0;i--)
for(intj=0;jprintf("\n");
}
29北理工的恶龙
成绩:
10/折扣:
0.8
背景:
最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。
要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。
而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。
校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。
输入:
第一行龙头数n,勇士人数m(1<=n,m<=100)接下来n行,每行包含一个整数,表示龙头的直径接下来m行,每行包含一个整数,表示勇士的身高l
输出:
如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“bitisdoomed!
”
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.2 3↵
2.5↵
3.4↵
4.7↵
5.8↵
6.4↵
以文本方式显示
1.11↵
1秒
64M
0
测试用例2
以文本方式显示
1.2 1↵
2.5↵
3.5↵
4.10↵
以文本方式显示
1.bit is doomed!
↵
1秒
64M
0
#include
intmain()
{
intdragon,hero;
scanf("%d%d",&dragon,&hero);
intdragonhead[100]={0};
intherohight[100]={0};
//input
for(inti=0;iscanf("%d",&dragonhead[i]);
for(inti=0;iscanf("%d",&herohight[i]);
//makethedateinorder
inttemp;
for(inti=0;i{
for(intj=0;j{
if(dragonhead[j]>dragonhead[j+1])
{
temp=dragonhead[j];
dragonhead[j]=dragonhead[j+1];
dragonhead[j+1]=temp;
}
}
}
for(inti=0;i{
for(intj=0;j{
if(herohight[j]>herohight[j+1])
{
temp=herohight[j];
herohight[j]=herohight[j+1];
herohight[j+1]=temp;
}
}
}
//arrangeherotokillthedragon
intstart=0;
for(inti=0;i{
for(intj=start;j{
if(herohight[j]>=dragonhead[i])
{
dragonhead[i]=0;
start++;
break;
}
else
{
herohight[j]=0;
start++;
}
}
if(start>hero)
break;
}
for(inti=start;iherohight[i]=0;
//caculatethegrade
intsd=0;
intsh=0;
for(inti=0;isd=sd+dragonhead[i];
for(inti=0;ish=sh+herohight[i];
if(sd==0)
printf("%d\n",sh);
else
printf("bitisdoomed!
\n");
}
31合并字符串
成绩:
10/折扣:
0.8
输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
输入:
两个已经排好顺序(升序)的两个字符串
输出:
一个合并在一起的有序(升序)的字符串
要求:
设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.abcdef↵
2.bcefghi↵
以文本方式显示
1.abbccdeeffghi↵
1秒
64M
0
测试用例2
以文本方式显示
1.123456↵
2.789↵
以文本方式显示
1.9↵
1秒
64M
0
测试用例3
以文本方式显示
1.789↵
2.12345↵
以文本方式显示
1.↵
1秒
64M
0
测试用例4
以文本方式显示
1.123456↵
2.123456↵
以文本方式显示
1.1↵
1秒
64M
0
测试用例5
以文本方式显示
1.123456↵
2.↵
以文本方式显示
1.123456↵
1秒
64M
0
测试用例6
以文本方式显示
1.↵
2.123456↵
以文本方式显示
1.123456↵
1秒
64M
0
#include
intmain()
{
chara[50],b[50];
gets(a);
gets(b);
char*p1;
p1=&a[0];
char*p2;
p2=&b[0];
for(;1;)
{
if(*p1=='\0')
{
printf("%s",p2);
break;
}
if(*p2=='\0')
{
printf("%s",p1);
break;
}
if(*p1>*p2)
{
printf("%c",*p2);
p2++;
}
else
{
printf("%c",*p1);
p1++;
}
}
printf("\n");
}
32串的减法
成绩:
10/折扣:
0.8
输入字符串s和t(串长不超过80个字符),将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。
例如:
当s="112345",t="2467"时,u="1135"。
输入:
第一行为串s
第二行为串t
输出:
串u
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.112345↵
2.2467↵
以文本方式显示
1.1135↵
1秒
64M
0
#include
#include
intmain()
{
chara[80];
charb[80];
gets(a);
gets(b);
intl=strlen(a);
for(inti=0;b[i]!
='\0';i++)
{
for(intj=0;jif(a[j]==b[i])
a[j]='\0';
}
for(intk=0;kif(a[k]!
='\0')
printf("%c",a[k]);
printf("\n");
}
H9:
五年级小学生的题目(选做)
成绩:
5/折扣:
0.8
那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。
小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:
用逗号分隔的整数序列,及其运算符和等号
输出:
最大数op最小数=结果
说明:
本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.1,10,100,+,=↵
以文本方式显示
1.100 + 1 = 101↵
1秒
64M
0
测试用例2
以文本方式显示
1.-100,-1,1,100,+,=↵
以文本方式显示
1.100 + (-100) = 0↵
1秒
64M
0
测试用例3
以文本方式显示
1.-20,-10,0,10,20,*,=↵
以文本方式显示
1.20 * (-20) = -400↵
1秒
64M
0
#include
#include
intintpow(inta,intb)//a^b
{
intresult=1;
for(inti=0;i
result=result*a;
returnresult;
}
structdate
{
intmax;
intmin;
charop;
intr;
};
structdatefunction(charp[],intn)
{
structdateresult;
n=n-4;
intmax=-10000;
int