C语言作业 2.docx

上传人:b****2 文档编号:41700 上传时间:2023-04-28 格式:DOCX 页数:23 大小:25.28KB
下载 相关 举报
C语言作业 2.docx_第1页
第1页 / 共23页
C语言作业 2.docx_第2页
第2页 / 共23页
C语言作业 2.docx_第3页
第3页 / 共23页
C语言作业 2.docx_第4页
第4页 / 共23页
C语言作业 2.docx_第5页
第5页 / 共23页
C语言作业 2.docx_第6页
第6页 / 共23页
C语言作业 2.docx_第7页
第7页 / 共23页
C语言作业 2.docx_第8页
第8页 / 共23页
C语言作业 2.docx_第9页
第9页 / 共23页
C语言作业 2.docx_第10页
第10页 / 共23页
C语言作业 2.docx_第11页
第11页 / 共23页
C语言作业 2.docx_第12页
第12页 / 共23页
C语言作业 2.docx_第13页
第13页 / 共23页
C语言作业 2.docx_第14页
第14页 / 共23页
C语言作业 2.docx_第15页
第15页 / 共23页
C语言作业 2.docx_第16页
第16页 / 共23页
C语言作业 2.docx_第17页
第17页 / 共23页
C语言作业 2.docx_第18页
第18页 / 共23页
C语言作业 2.docx_第19页
第19页 / 共23页
C语言作业 2.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言作业 2.docx

《C语言作业 2.docx》由会员分享,可在线阅读,更多相关《C语言作业 2.docx(23页珍藏版)》请在冰点文库上搜索。

C语言作业 2.docx

C语言作业2

28组成最大数

成绩:

10/折扣:

任意输入一个自然数,输出该自然数的各位数字组成的最大数。

例如,输入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;i

for(inti=9;i>=0;i--)

for(intj=0;j

printf("\n");

}

29北理工的恶龙

成绩:

10/折扣:

背景:

最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟,于是,校长下令召集全校所有勇士杀死这只恶龙。

要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。

而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。

校长想花最少的学分数杀死恶龙,于是找到你寻求帮助。

输入:

第一行龙头数n,勇士人数m(1<=n,m<=100)接下来n行,每行包含一个整数,表示龙头的直径接下来m行,每行包含一个整数,表示勇士的身高l

输出:

如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“bitisdoomed!

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.23

2.5

3.4

4.7

5.8

6.4

1.11

1秒

64M

0

测试用例2

1.21

2.5

3.5

4.10

1.bitisdoomed!

1秒

64M

0

#include<>

intmain()

{

intdragon,hero;

scanf("%d%d",&dragon,&hero);

intdragonhead[100]={0};

intherohight[100]={0};

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

.

....

.*..

....

根据上面的地图,可以计算出应该提供给游戏者的数字如下所示:

*100

2210

1*10

1110

每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。

输入

输入中将包括一系列的地图,每个地图的第一行有两个整数n和m(0

下面的n行每行都有m个字符,其中"."表示安全而"*"表示地雷。

如果地图的n和m都为0,则表示输入结束。

输出

针对每一个地图,首先输出一行:

Field#x:

其中x是当前地图的编号(从1开始)。

下面的n行则将地图中的"."以数字表示,该数字表示该方格周围有多少颗地雷。

来源

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.44

2.*...

3.....

4..*..

5.....

6.35

7.**...

8......

9..*...

10.00

1.Field#1:

2.*100

3.2210

4.1*10

5.1110

6.

7.Field#2:

8.**100

9.33200

10.1*100

1秒

64M

0

测试用例2

1.33

2....

3....

4....

5.33

6.***

7.***

8.***

9.00

1.Field#1:

2.000

3.000

4.000

5.

6.Field#2:

7.***

8.***

9.***

1秒

64M

0

#include<>

voidprint(char*a,char*b,char*c,intn)

{

intcount=0;

if(*b=='*')printf("*");

else

{

if(*a=='*')count++;

if(*(a+1)=='*')count++;

if(*(b+1)=='*')count++;

if(*(c+1)=='*')count++;

if(*c=='*')count++;

printf("%d",count);

}

for(inti=1;i

{

count=0;

if(*(b+i)=='*')

printf("*");

else

{

if(*(a+i-1)=='*')count++;

if(*(a+i)=='*')count++;

if(*(a+i+1)=='*')count++;

if(*(b+i-1)=='*')count++;

if(*(b+i+1)=='*')count++;

if(*(c+i-1)=='*')count++;

if(*(c+i+1)=='*')count++;

if(*(c+i)=='*')count++;

printf("%d",count);

}

}

printf("\n");

}

intmain()

{

intflagn=0;

intn,r;

charempty[110];

for(inti=0;i<110;i++)

empty[i]='.';

chara[110],b[110],c[110];

char*aa;

aa=&a[0];

char*bb;

bb=&b[0];

char*cc;

cc=&c[0];

for(inti=1;1;i++)

{

for(intj=0;j<110;j++);

printf("Field#%d:

\n",i);

print(aa,bb,cc,n);

}

else

{

printf("Field#%d:

\n",i);

gets(b);

b[n]='.';

for(intj=0;j

{

gets(c);

c[n]='.';

print(aa,bb,cc,n);.,16,先对前17位数字的权求和

Ai:

表示第i位置上的身份证号码数字值

Wi:

表示第i位置上的加权因子

Wi:

7910584216379105842

(2)计算模

Y=mod(S,11)

(3)通过模得到对应的校验码

Y:

012345678910

校验码:

10X98765432

四、举例如下:

15位的身份证号升级办法:

15位的身份证号:

ddddddyymmddxxp

18位的身份证号:

ddddddyyyymmddxxpy

∙其中dddddd为地址码(省地县三级)

∙yyyymmddyymmdd为出生年月日

∙xx顺号类编码

∙p性别

15位的yy年升为18位后,变成19yy年,但对于百岁以上老人,则为18yy年,此时,他们的最后三位顺序码为996,997,998或999来标记。

输入

输入n组身份证号码,第一行为个数,以后每行为身份证号码。

输出

如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.4

2.

3.

4.

5.

1.Invalid

2.Valid

3.

4.

1秒

64M

0

#include<>

#include<>

intmod(int*p)

{

intresult;

intsum;

sum=*p*7+*(p+1)*9+*(p+2)*10+*(p+3)*5+*(p+4)*8+*(p+5)*4+*(p+6)*2+*(p+7)*1+*(p+8)*6+*(p+9)*3+*(p+10)*7+*(p+11)*9+*(p+12)*10+*(p+13)*5+*(p+14)*8+*(p+15)*4+*(p+16)*2;

result=sum%11;

returnresult;

}

intmain()

{

charinput[30];

intid[18]={0};

intchoice=0;

intn;

charbase[11]={'1','0','X','9','8','7','6','5','4','3','2'};

intx[11]={1,0,10,9,8,7,6,5,4,3,2};

inttemp;

scanf("%d",&n);

temp=getchar();

for(inti=0;i

{

gets(input);

if(strlen(input)==15)

choice=1;

elseif(strlen(input)==18)

choice=2;

else

{

printf("Invalid\n");

continue;

}

switch(choice)

{

case1:

{

for(intk=0;k<6;k++)

id[k]=input[k]-'0';

id[6]=1;id[7]=9;

for(intk=8;k<17;k++)

id[k]=input[k-2]-'0';

if((id[14]==9)&&(id[15]==9)&&(id[16]>5))

id[7]=8;

id[17]=mod(id);

for(intk=0;k<17;k++)

printf("%d",id[k]);

printf("%c",base[id[17]]);

printf("\n");

break;

}

case2:

{

intflag=0;

for(intk=0;k<17;k++)

id[k]=input[k]-'0';

for(intq=0;q<17;q++)

if(id[q]>9||id[q]<0)

flag=1;

intyear,month,day;

year=id[6]*1000+id[7]*100+id[8]*10+id[9];

month=id[10]*10+id[11];

day=id[12]*10+id[13]*10;

if(month>12)

flag=1;

if(year%4!

=0&&month==2&&day>28)

flag=1;

if(year%4==0&&month==2&&day>29)

flag=1;

if(id[8]==8)

flag=1;

if(input[17]=='X'||input[17]=='x')

id[17]=2;

elseif(input[17]-'0'>9||input[17]-'0'<0)

id[17]=-1;

else

id[17]=x[input[17]-'0'];

if(mod(id)==id[17]&&flag==0)

printf("Valid\n");

else

printf("Invalid\n");

break;

}

}

}

}

H12:

安全的密码(选做)

成绩:

5/折扣:

随着电子设备的广泛运用,密码也渐渐融入每个人的生活。

保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。

一个安全的密码,最好由大小写字母、数字或符号组成。

包含越多种类的字符,其安全性就越高。

同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。

并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。

任务

林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。

现在他向你求助,请你帮忙设计一个程序来解决这个问题。

应当按照以下的规则来判断密码是否安全:

1.如果密码长度小于6位,则不安全

2.如果组成密码的字符只有一类,则不安全

3.如果组成密码的字符有两类,则为中度安全

4.如果组成密码的字符有三类或以上,则为安全

通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。

输入

输入的第一行是一个整数N,表明后面有多少组密码。

随后的N行输入包括N个密码,每个密码的长度均小于20个字符。

输出

针对每一个密码判断并输出它是否安全。

对于不安全的密码输出"NotSafe",对于中度安全的密码输出"MediumSafe",对于安全的密码输出"Safe"

输入样例

4

1234

abcdef

ABC123

1#c3Gh

输出样例

NotSafe

NotSafe

Medium

SafeSafe

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.10

2.abcDEF

3.ABC

4.qw

5.`

6.ABCDEFGHIJKLMNOPQRST

7.

8.1aB

9.1B

10.aX

11.qwe123%^&ABC

1.MediumSafe

2.NotSafe

3.NotSafe

4.NotSafe

5.NotSafe

6.NotSafe

7.Safe

8.NotSafe

9.Safe

10.Safe

1秒

64M

0

#include<>

#include<>

intjudge(char*p,intn)

{

intresult=0;

if(n<6)

result=1;

else

{

inta[4]={0,0,0,0};

for(inti=0;i

{

if((*(p+i)>='0')&&(*(p+i)<='9'))

a[0]=1;

elseif((*(p+i)>='a')&&(*(p+i)<='z'))

a[1]=1;

elseif((*(p+i)>='A')&&(*(p+i)<='Z'))

a[2]=1;

else

a[3]=1;

}

result=a[0]+a[1]+a[2]+a[3];

}

returnresult;

}

intmain()

{

chartemp;

charwords[21];

intn=0;

scanf("%d",&n);

temp=getchar();

for(inti=0;i

{

for(intj=0;j<21;j++)

words[j]='\0';

gets(words);

switch(judge(words,strlen(words)))

{

case1:

{

printf("NotSafe\n");

break;

}

case2:

{

printf("MediumSafe\n");

break;

}

case3:

case4:

{

printf("Safe\n");

break;

}

}

}

}

H13:

编码问题(选作)

成绩:

5/折扣:

设有一个整形数组A[0..N-1];存放的元素为0~N-1(1

例如,当N=6时,有:

A=(4,3,0,5,1,2)。

此时,数组A的编码定义如下:

A[0]编码为0;

A[i]编码为:

在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)

例如上面数组A的编码为:

B=(0,0,0,3,1,2)

若给出数组A,则可求出其编码。

同理,若给出数组A的编码,可求出A中的原数据。

输入:

推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组)

数组个数

数组或数组编码元素

输出:

数组编码、或数组本身(元素之间以空格分隔)

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.1

2.6

3.430512

1.000312

1秒

64M

0

#include<>

intmain()

{

intchoice;

intn;

scanf("%d%d",&choice,&n);

intnum[10]={0};

intresult[10]={0};

for(inti=0;i

{scanf("%d",&num[i]);}

switch(choice)

{

case1:

.,n,n+1,...,2n编号并在开始时保持着这种顺序。

一次洗牌就是将牌原来的次序变为n+1,1,n+2,2,...,2n,n,也就是将原来的前n张牌放到位置2,4,...,2n,并且将余下的n张牌按照他们原来的次序放到奇数位置1,3,...,2n-1。

已经证明对于任何一个自然数n,这2n张牌经过一定次数的洗牌就回到原来的次序。

但我们不知道对于一个特定的n,需要几次洗牌才能将牌洗回原来的次序。

输入:

牌张数的一半n,即初始情况下一共有2n张牌,n为int型整数

输出:

将牌洗回原来的次序所需要的洗牌次数

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.10

1.6

1秒

64M

0

#include<>

intmain()

{intn,count=1;

scanf("%d",&n);

ints=2;

for(count=1;s!

=1;count++)

{if(s<=n){s=2*s;}

else{s=(s-n)*2-1;}}

printf("%d\n",count);}

35科学记数法

成绩:

10/折扣:

对于非常大或者非常小的数据,我们通常用科学记数法来表示。

例如在科技文献和电脑中经常遇到的×106(计算机中的科学记数法表示为:

),或者×10-5(科学记树法表示:

)这种类型的数据。

输入:

用科学记数法表示的数据。

即为符合C语言表示的科学记数法表示。

输出:

该数据的双精度表示

说明:

输入数据的精度不高于小数点后50位。

输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。

结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.E3

1.

1秒

64M

0

测试用例2

1.e-3

1.

1秒

64M

0

#include<>

#include<>

intintpow(inta,intb)

{

intresult=1;

for(inti=0;i

result=result*a;

returnresult;

}

intmain()

{

charline[100];

intpe=0;

intstart1=0,start2,end1,end2;

intflag1=1,flag2=1;

intlenth;

inty=0;

gets(line);

for(inti=0;i<(int)strlen(line);i++)

{

if((line[i]=='')||(line[i]=='.'))

{

for(intj=i;j<(strlen(line)+1);j++)

{

line[j]=line[j+1];

}

i=i-1;

}

}

lenth=strlen(line);

if(line[0]=='-')

{

start1=1;

flag1=-1;

}

for(inti=0;i

{

if((line[i]=='e')||line[i]=='E')

{

pe=i;

break

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2