1、要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。第一行 龙头数 n , 勇士人数 m ( 1=n, m=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “ bit is doomed! ” 1. 23 2. 5 3. 4 4. 7 5. 8 6. 41. 11测试
2、用例 21. 21 3. 5 4. 101. bitisdoomed!int main() int dragon,hero;%d%d,&dragon,&hero); int dragonhead100=0; int herohight100=0;1. .*. 根据上面的地图,可以计算出应该提供给游戏者的数字如下所示:*10022101*101110 每个数字表示了该方格周围到底有几个地雷,当然,一个方格周围最多的时候只会有八个。输入 输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m(0 n,m = 100),它们表示了地图的行数和列数。下面的 n 行每行都有 m 个字符,其中
3、. 表示安全而 * 表示地雷。如果地图的 n 和 m 都为 0,则表示输入结束。输出 针对每一个地图,首先输出一行:Field #x:其中 x 是当前地图的编号(从 1 开始)。下面的 n 行则将地图中的 以数字表示,该数字表示该方格周围有多少颗地雷。来源1. 44 2. *. 3. . 4. .*. 5. . 6. 35 7. *. 8. . 9. .*. 10. 001. Field#1:2. *100 3. 2210 4. 1*10 5. 1110 6. 7. Field#2:8. *100 9. 33200 10. 1*1001. 33 2. . 3. . 4. . 5. 33 6.
4、* 7. * 8. * 9. 002. 000 3. 000 4. 000 5. 6. Field#2:9. *void print(char* a,char* b,char *c,int n) int count=0; if(*b=*) printf( else if(*a=) count+; if(*(a+1)= if(*(b+1)= if(*(c+1)= if(*c=,count); for(int i=1;i+) count=0; if(*(b+i)=) printf( else if(*(a+i-1)= if(*(a+i)= if(*(a+i+1)= if(*(b+i-1)= if(
5、*(b+i+1)= if(*(c+i-1)= if(*(c+i+1)= if(*(c+i)= int flagn=0; int n,r; char empty110;110; emptyi=.; char a110,b110,c110; char *aa; aa=&a0; char *bb; bb=&b0; char *cc; cc=&c0;1;j+);Field #%d: print(aa,bb,cc,n); gets(b); bn= for(int j=0;r-1;j+) gets(c); cn= print(aa,bb,cc,n);. , 16 ,先对前17位数字的权求和 Ai: 表示第
6、i位置上的身份证号码数字值 Wi: 表示第i位置上的加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模 Y = mod(S, 11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2 四、举例如下:15位的身份证号升级办法:15位的身份证号:dddddd yymmdd xx p 18位的身份证号:dddddd yyyymmdd xx p y 其中dddddd为地址码(省地县三级) yyyymmdd yymmdd 为出生年月日 xx顺号类编码 p性别 15 位的 yy
7、 年升为 18 位后,变成 19yy年,但对于百岁以上老人, 则为 18yy 年,此时,他们的最后三位顺序码为996, 997, 998 或 999 来标记。输入n组身份证号码,第一行为个数,以后每行为身份证号码。如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。1. 4 2. 3. 4. 5. 1. Invalid 2. Valid 4. int mod(int *p) int result; int sum; sum=*p*7+*(p+1)*9+*(p+2)*10+*(p+3)*5+*(p+4)*8+*(p+5)*4+*(p+6)*2+*
8、(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; return result; char input30; int id18=0; int choice=0; int n; char base11=1,X98765432; int x11=1,0,10,9,8,7,6,5,4,3,2; int temp;n); temp=getchar(); gets(input); if(strlen(input)=15) choic
9、e=1; else if(strlen(input)=18) choice=2;Invalidn continue; switch (choice) case 1: for(int k=0;k5) id7=8; id17=mod(id); printf(,idk); printf(%c,baseid17); break; case 2: int flag=0; for(int q=0;q9|idq12) flag=1; if(year%4!=0&month=2&day28) if(year%4=0&29) if(id8=8) if(input17=|input17=x id17=2; else
10、 if(input17-9|input17- id17=-1; else id17=xinput17-; if(mod(id)=id17&flag=0)ValidnH12:安全的密码(选做) 5 / 折扣:随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。任务林晓炜正在设计一个网络交易
11、系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。应当按照以下的规则来判断密码是否安全:1. 如果密码长度小于 6 位,则不安全 2. 如果组成密码的字符只有一类,则不安全 3. 如果组成密码的字符有两类,则为中度安全 4. 如果组成密码的字符有三类或以上,则为安全 通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。输入输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。输出针对每一个密码判断并输出它是否安
12、全。对于不安全的密码输出 Not Safe,对于中度安全的密码输出 Medium Safe,对于安全的密码输出 Safe输入样例41234abcdefABC1231#c3Gh输出样例Not SafeMediumSafe Safe1. 10 2. abcDEF 3. ABC 4. qw 5. 6. ABCDEFGHIJKLMNOPQRST 7. 8. 1aB 9. 1B 10. aX 11. qwe123%&ABC1. MediumSafe 2. NotSafe 3. NotSafe 4. NotSafe 5. NotSafe 6. NotSafe 7. Safe 8. NotSafe 9. S
13、afe 10. Safeint judge(char *p,int n) int result=0; if(n=)&(*(p+i)az a1=1;AZ a2=1; else a3=1; result=a0+a1+a2+a3; char temp; char words21; int n=0;21; wordsj=0 gets(words); switch(judge(words,strlen(words)Not SafenMedium Safen case 3:case 4:SafenH13:编码问题(选作) 设有一个整形数组 A0.N-1;存放的元素为 0N-1 (1N=10)之间的整数,且
14、 AiAj(ij)。例如,当N=6时,有:A=(4,3,0,5,1,2)。此时,数组A的编码定义如下: A0编码为0; Ai编码为:在A0,A1,Ai-1中比Ai的值小的个数 (i=1,2,N-1) 例如上面数组 A的编码为:B=(0,0,0,3,1,2)若给出数组A,则可求出其编码。同理,若给出数组A的编码,可求出A中的原数据。 推导方向(取值为1或2,如为1,则表示根据数组求数组编码;如为2,则表示根据编码反求数组) 数组个数 数组或数组编码元素 数组编码、或数组本身(元素之间以空格分隔)1. 1 2. 6 3. 4305121. 000312 int choice;choice,& in
15、t num10=0; int result10=0; scanf(numi); switch(choice)., 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为in
16、t型整数 将牌洗回原来的次序所需要的洗牌次数1. 101. 6int n,count=1;scanf(int s=2;for(count=1;s!=1;count+)if(s=n)s=2*s;elses=(s-n)*2-1;printf(%dn35 科学记数法对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 106 (计算机中的科学记数法表示为:),或者 10-5 (科学记树法表示:)这种类型的数据。 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 该数据的双精度表示说明: 输入数据的精度不高于小数点后50位。 输入数据时,在实数和幂之间有
17、空格进行分隔,空格个数不定。 结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。1. E31. e-3int intpow(int a,int b) int result=1;b; result=result*a; char line100; int pe=0; int start1=0,start2,end1,end2; int flag1=1,flag2=1; int lenth; int y=0; gets(line);(int)strlen(line);i+) if(linei= )|(linei=) for(int j=i;(strlen(line)+1);j+) linej=linej+1; i=i-1; lenth=strlen(line); if(line0=-) start1=1; flag1=-1;lenth;i+) e)|linei=E pe=i; break