2018年程序设计基础(B)I题解

  • 珂朵莉篇
    • 今年是哪年?
    • 珂朵莉与黄油面包
    • 珂朵莉与圣剑保养
    • 珂朵莉与失忆
    • 珂朵莉与圣剑
    • 珂朵莉与妖精仓库的妖精们
    • 珂朵莉与斯卡布罗集市
    • 最终之战
  • 御坂美琴篇
    • 御坂美琴与妹妹们
    • 御坂美琴与初春饰利
    • 御坂美琴与佐天泪子
    • 御坂美琴与白井黑子
    • 真正的落雷
    • 御坂美琴与呱太
    • 御坂美琴与伙伴们
    • 一方通行与最后之作

珂朵莉篇

今年是哪年?

威廉是人类世界的准勇者,在完成任务时被石化,直至数百年后年才被发现,治疗并脱离石化状态。
作为刚刚脱离石化的威廉,他十分想知道今年是哪一年。
如果得知今年的年分大于等于2018年,威廉会十分惊讶并惊呼 “What?” 。否则输出 “I know”(不包含引号)。

Input

输入一个数字n,代表威廉苏醒时的年份。( 1000 <= n <= 9999 )

Output

若 n 大于等于2018,输出 “What?” ,否则输出 “I know” 。(均不包含括号)

Sample Input

2018

Sample Output

What?

答案:

#include<stdio.h>
int main()
{int n;scanf("%d",&n);if(n>=2018){printf("What?\n");}elseprintf("I know\n");return 0;
}

珂朵莉与黄油面包

珂朵莉非常喜欢吃黄油面包,现在珂朵莉想吃一个大小为 d 的黄油面包,你能满足她么?

Input

一个正整数 d 。(1<= d <=20)

Output

一个高和宽均为 2*d-1 的菱形,代表一个大小为 d 的黄油面包,详见样例。

Sample Input

3

Sample Output

** *
*   ** **

答案:

#include<stdio.h>
int main()
{int d,i,j;scanf("%d",&d);for(i=1;i<=d;i++){for(j=1;j<=d-i;j++){printf(" ");}printf("*");if(i==1){printf("\n");}if(i>=2){for(j=1;j<=2*(i-1)-1;j++){printf(" ");}printf("*\n");}}for(i=1;i<=d-1;i++){for(j=1;j<=i;j++){printf(" ");}if(d-1-i==0)printf("*\n");else{printf("*");for(j=1;j<=2*(d-1-i)-1;j++){printf(" ");}printf("*\n");}}return 0;
}

珂朵莉与圣剑保养

圣剑是由若干护符经过精密的联系组合成的,在进行圣剑的保养时由于护符间复杂的相互干涉作用会发出美妙的音符声,威廉作为人类勇者精通圣剑保养,经过多年总结发现最终发出的音符与保养时拨动的护符编号 m 及拨动的力度 n 存在一定的函数关系F(m, n) 。
珂朵莉用大小为 n 的力度拨动了 一下编号为 m 的护符,你知道经过复杂的相互干涉作用最终发出的音符是什么么?

F(m, n)的定义是:

  1. 若 m * n <= 7,返回 m * n 。
  2. 否则若 m >= 0且 n >= 0,返回F( m - 2 , F ( m - 1 , n - 1 ) ) 。
  3. 否则若 m < 0 或 n < 0 , 返回 1 。

Input

多组输入至文件结束,每行两个正整数 m,n。( 0<= m, n<= 100 )

Output

每组数据输出一行包含一个正整数代表最终发出的音符。

Sample Input

23 33

Sample Output

0

答案:

#include<stdio.h>
int F(int m,int n)
{if(m*n<=7){return m*n;}if(m>=0&&n>=0){return F(m-2,F(m-1,n-1));}if(m<0||n<0){return 1;}
}
int main()
{int m,n;while(~scanf("%d %d",&m,&n))printf("%d\n",F(m,n));return 0;
}

珂朵莉与失忆

珂朵莉由于受到前世记忆的侵蚀会不断地失忆。但是并不是每天都会失忆。
失忆的发生条件是当且仅当这一天的编号为素数的时候,会失去这一天编号的数位之和个单位的记忆。
现在珂朵莉想知道在编号为 l 到 r 的这段日子里一共会失去多少记忆?

Input

多组输入至文件结束为止,每组两个数 l , r 含义如上文所述。到文件结束为止(1 <= l <= r <= 100)

Output

输出一个整数代表失去的记忆总数。

Sample Input

10 15

Sample Output

6

答案:

#include<stdio.h>
#include<math.h>
int main()
{int i,sum,n,m,j,flag,c,x;while(~scanf("%d %d",&n,&m)){sum=0;for(i=n; i<=m; i++){x=i;flag=0;c=0;if(i==1)sum-=1;if(x==2){while(x){c+=x%10;x/=10;}sum+=c;}else{x=i;for(j=2; j<=sqrt(x); j++){if(x%j==0){flag=1;break;}}if(flag==0){while(x){c+=x%10;x/=10;}sum+=c;}}}printf("%d\n",sum);}return 0;
}

珂朵莉与圣剑

妖精仓库里有n把圣剑,每把圣剑都有一个攻击值 d 和对使用者体力的消耗值 s 。
珂朵莉想要攻击值高的圣剑,同时又想要体力的消耗尽可能地低,因此对她来说,圣剑的满意度等于攻击值 d 除以消耗值 s 。
现在珂朵莉想要知道她第 k 满意的圣剑的满意度是多少(满意度越高越好)。

Input

第一行两个正整数 n 和 k ,n 代表圣剑的数量。(1 <= k <= n <= 1000)
接下来 n 行每行两个正整数 di 和 si ,分别代表第 i 把圣剑的攻击值和对使用者体力的消耗值。(1 <= si , di <=100)

Output

一个正整数代表她第 k 满意的圣剑的满意度是多少,结果保留两位小数。

Sample Input

4 2
1 3
2 4
3 6
4 5

Sample Output

0.50

答案:

#include<stdio.h>
int main()
{int n,k,i;double a[10000],d,s,t;scanf("%d %d",&n,&k);for(i=1;i<=n;i++){scanf("%lf %lf",&d,&s);a[i]=d/s;}for(i=1;i<n;i++){for(int j=1;j<=n-i;j++){if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}}printf("%.2lf\n",a[k]);return 0;
}

珂朵莉与妖精仓库的妖精们

随着失忆的加剧,珂朵莉已经不能记清妖精仓库里小妖精们的名字了。
好在珂朵莉一直有写日记的好习惯,一天,在她读日记的时候,想要知道在自己的日记中对于每个小妖精分别提到过多少次她们的名字。你能告诉她么?
妖精仓库中的小妖精的名字分别为 Nephren Ithea Rhantolk Nopht

Input

一长度行不超过1000的字符串代表日记的内容,输入数据保证不含空格。

Output

输出包含四行,
每行按照样例顺序输出名字及其在日记中被提到的次数。
输出格式请仔细按照示例输出的格式输出。

Sample Input

fdsgfsgfdNephrensNephrenItheagdfRhantolkRhantolkdsdNophtNopht

Sample Output

Nephren: 2
Ithea: 1
Rhantolk: 2
Nopht: 2

答案:

#include <stdio.h>
#include <math.h>
#include <string.h>int a[5], len;
char s[1111];
int main()
{scanf("%s", s);len = strlen(s);int i;for (i = 0; i < len; i++){if (s[i] == 'N' && s[i + 1] == 'e' && s[i + 2] == 'p' && s[i + 3] == 'h' && s[i + 4] == 'r' && s[i + 5] == 'e' && s[i + 6] == 'n')a[0]++;if (s[i] == 'I' && s[i + 1] == 't' && s[i + 2] == 'h' && s[i + 3] == 'e' && s[i + 4] == 'a')a[1]++;if (s[i] == 'R' && s[i + 1] == 'h' && s[i + 2] == 'a' && s[i + 3] == 'n' && s[i + 4] == 't' && s[i + 5] == 'o' && s[i + 6] == 'l' && s[i + 7] == 'k')a[2]++;if (s[i] == 'N' && s[i + 1] == 'o' && s[i + 2] == 'p' && s[i + 3] == 'h' && s[i + 4] == 't')a[3]++;}printf("Nephren: %d\n", a[0]);printf("Ithea: %d\n", a[1]);printf("Rhantolk: %d\n", a[2]);printf("Nopht: %d\n", a[3]);return 0;
}

珂朵莉与斯卡布罗集市

斯卡布罗集市是一个非常繁华的集市,这里有很多有名的景点。为了防止迷路,威廉买了一张集市的地图,地图长 m 宽 n ,其中 “1” 代表他们目前的位置,“0” 代表空地,其他数字分别代表不同的景点(每个景点的编号均不同且每个景点在地图上只出现一次)。
现在珂朵莉想要知道从当前位置到距离编号为 x 的景点在地图上的最短距离是多少(在地图上只能沿与坐标平行的方向移动,图中的每一个点都可以走),你能帮帮他么?

Input

多组输入,每组数据第一行两个数字 n , m 代表地图的宽和长( 1<= n, m<= 100) 。
接下来的 n 行每行 m 个数(空格分隔)代表地图。
最后输入一个数字 x 代表珂朵莉想要去的景点编号( 2<= x<= 1000)。

Output

输出当前位置距离想去的景点在地图上的最短距离(在地图上只能沿与坐标平行的方向移动)

Sample Input

3 3
0 1 2
3 0 0
6 4 9
6

Sample Output

3

Hint

在计算地图上的最短距离时结果仅与两点坐标有关而不会因为其他景点的阻隔而绕路,对于样例:
( 1, 2 ) -> ( 2, 2 )
( 2, 2 ) -> ( 3, 2 )
( 3, 2 ) -> ( 3, 1 )
因此答案是 2 + 1 ,三步。

答案:

#include<stdio.h>
#include<stdlib.h>
int main()
{int n,m,i,j,xx,x,y;int a[101][101];while(~scanf("%d %d",&n,&m)){for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&a[i][j]);if(a[i][j]==1){x=i;y=j;}}}scanf("%d",&xx);for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(a[i][j]==xx){printf("%d\n",abs(x-i)+abs(y-j));}}}}return 0;
}

最终之战

恭喜大家来到最终之战。这对珂朵莉一行来说是非常重要的一战,同时也极有可能是决定你能否在本次期末考试中成功AK,收获满分的一战,祝大家战斗胜利。

为了简化战斗过程,尽可能的用最小的损失来赢得战斗,我们制定了如下的战斗规则:
战斗开始后,我方会按照输入的顺序依次派出血量大于 0 的妖精循环攻击兽( 最后一人攻击完后再从第一个人开始依次攻击),每次攻击时所实际输出的攻击力为妖精的攻击力与所持圣剑之和,由于兽具有防御,兽实际收到的伤害为所受攻击的攻击力减去自身的防御力。攻击时优先攻击体型较大的兽。攻击结束后我方妖精同样会受到所攻击兽的攻击,受到的伤害同样为兽的攻击力减掉我方妖精的防御力。同时由于速度的不同,若我的速度大于所攻击兽的速度,我可以额外攻击一次相同的兽,若我的速度小于所攻击兽的速度 ,则兽可以多攻击我一次。
注意,若被攻击后血量小于等于0,则认为他已经牺牲了,将不会再参与之后回合的战斗,但当前回合不受影响,例如在某一回合中,兽受到攻击后血量降低至0一下,但它依然可以在本回合中发起反击。

下面是兽的数据:

中文名            英文名(id)   血      攻    防     速     体型
叹月的最初之兽    Chantre       2333    100    7    input    9
深潜的第六兽      Timere        600     34     4    input    8
穿凿的第二兽      Aurora        200     24     3    input    7
绞吞的第四兽      tarde         400     43     9    input    6
广覆的第五兽      Materno       500     34     3    input    5
沉滞的第十一兽    Croyance      1100    65     6    input    4
织光的第十四兽    Vinkra        1400    90     2    input    3

下面是圣剑的数据:

中文名        英文名(id)   加成
珀西瓦尔      Perseval       78
瑟尼欧里斯    Ceniolis       43
瓦尔卡利斯    Valgaris       110
印萨尼亚      Insania        23

现在请你根据输入的数据判断能否在100回合内获胜,若可以获胜,输出攻击的最少回合数,否则输出“BOOM!”。

Input

首先输入四行,每行由五部分组成,分别是要派出的妖精的名字,血量,攻击值,防御值,速度和所拿的武器名。
最后一行包含七个空格分隔的数字,代表按体型由大到小的兽的速度。
妖精和武器的名字是一个长度不超过10的不含空格的字符串,1<=血量<=2000,10<=攻击值<=100,1<=防御值<=100,1<=速度<=10。

Output

若可以获胜(所有兽的血量均小于等于0),输出攻击的最少回合数,否则输出“BOOM!”。

Sample Input

Willem 2000 100 100 10 Valgaris
Chtholly 1500 70 40 9 Perseval
Nephren 1000 56 45 6 Insania
Ithea 500 65 54 5 Ceniolis
9 4 3 5 3 2 6

Sample Output

33

Hint

我方每派出一名妖精战斗即视为回合数加一。
实际所受攻击可能小于零,例如,当所受攻击力为5,自身防御力为10的时候,实际所受攻击为5-10=-5,这时无需特殊判断,可以理解为当攻击过小时,被攻击一方可化攻击为血量,血量上升。

答案:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{int axue[11],agong[11],afang[11],asu[11];int bxue[11],bgong[11],bfang[11],bsu[11];char c[11];for(int i=0; i<4; i++){scanf("%s %d %d %d %d %s",c,&axue[i],&agong[i],&afang[i],&asu[i],c);if(strcmp(c,"Perseval")==0)agong[i]+=78;if(strcmp(c,"Ceniolis")==0)agong[i]+=43;if(strcmp(c,"Valgaris")==0)agong[i]+=110;if(strcmp(c,"Insania")==0)agong[i]+=23;}bxue[0]=2333;bgong[0]=100;bfang[0]=7;bxue[1]=600;bgong[1]=34;bfang[1]=4;bxue[2]=200;bgong[2]=24;bfang[2]=3;bxue[3]=400;bgong[3]=43;bfang[3]=9;bxue[4]=500;bgong[4]=34;bfang[4]=3;bxue[5]=1100;bgong[5]=65;bfang[5]=6;bxue[6]=1400;bgong[6]=90;bfang[6]=2;for(int i=0; i<7; i++){scanf("%d",&bsu[i]);}int i=-1,ans=0,dd=100;while(dd--){i++;i%=4;if(axue[i]<=0){continue;}for(int j=0; j<7; j++){if(bxue[j]>0){ans++;bxue[j]-=agong[i]-bfang[j];axue[i]-=bgong[j]-afang[i];if(asu[i]>bsu[j]){bxue[j]-=agong[i]-bfang[j];}else if(asu[i]<bsu[j]){axue[i]-=bgong[j]-afang[i];}break;}}}int f=1;for(int j=0; j<7; j++){if(bxue[j]>0){f=0;}}if(f)printf("%d\n",ans);elseprintf("BOOM!\n");return 0;
}

御坂美琴篇

御坂美琴与妹妹们

在[量产型能力者计划]和[绝对能力者进化计划]中,学院都市利用御坂美琴的体细胞总共制作了20001个克隆个体。她们的个体编号分别为00001-20001。其中[00001,20000]号被称为"SISTER"(御坂妹妹) ,20001号被称为 “LastOrder”(最后之作)。
现在给你一个御坂的个体编号,请你判断她是"SISTER" 还是"LastOrder".

Input

输入一个正整数 id 表示御坂的个体编号 ( 1 <= id <= 20001 )。
输入数据没有前导零。

Output

根据题意输出"SISTER" 或是 “LastOrder”。 (引号不输出)

Sample Input

10086
Sample Output
SISTER

答案:

#include<stdio.h>
#include<string.h>
int main()
{int id;scanf("%d",&id);if(id>=00001&&id<=20000){printf("SISTER\n");}else if(id==20001){printf("LastOrder\n");}return 0;
}

御坂美琴与初春饰利


「初春饰利」 是御坂美琴的好朋友,在风纪委员中负责通信与情报管理工作。她很擅长密码破译等骇客工作,曾击败许多网络黑客入侵“某个系统”的挑战,是超天才的黑客,也是都市传说中“守护神(Gatekeeper)”的正体,但她本人并不知晓。
但是某一天,御坂美琴给了初春一个密码。初春发现这个密码实在是太复杂了,完全找不出任何的设计规律。经过认真分析后,初春发现密码中包含且仅包含大写字母和数字,她决定先把这些大写字母和数字分离开再继续寻找规律。

Input

输入数据共两行。
第一行输入一个正整数 len 表示字符串的长度。 (2 <= len <= 100)
第二行输入一个长度为 len 包含且仅包含大写字母和数字的字符串。

Output

第一行输出字符串中出现的大写字母。
第二行输出字符串中出现的数字。
(按在原串中出现的顺序输出,已经输出过的字符若再次出现仍需要输出)

Sample Input

18
ZXC741ASD852QWE963

Sample Output

ZXCASDQWE
741852963

答案:

法一:

#include<stdio.h>
#include<string.h>
int main()
{int len,i,j=0,k=0,x,y;char a[100],b[100],c[100];scanf("%d",&len);scanf("%s",a);for(i=0; i<len; i++){if(a[i]>='A'&&a[i]<='Z'){b[j]=a[i];j++;}x=j;if(a[i]>='0'&&a[i]<='9'){c[k]=a[i];k++;}y=k;}for(j=0; j<x; j++){printf("%c",b[j]);}printf("\n");for(k=0; k<y; k++){printf("%c",c[k]);}printf("\n");return 0;
}

法二:

#include<stdio.h>
#include<string.h>
int main()
{int len,i;char s[100];scanf("%d",&len);scanf("%s",s);for(i=0; i<len; i++){if(s[i]>='A'&&s[i]<='Z')printf("%c",s[i]);}printf("\n");for(i=0; i<len; i++){if(s[i]>='0'&&s[i]<='9')printf("%c",s[i]);}printf("\n");return 0;
}

御坂美琴与佐天泪子

「佐天泪子」是超过level 5级别的强者(误),人称「泪爷」。泪爷的衣服各式各样,这种超能力被誉为「海澜之家」。

一天,泪爷准备和御坂美琴、初春饰利一起出去吃饭,她打开了自己的衣柜(启动「海澜之家」),想要挑选一件合适的衣服出门。
衣柜里总共有 N 件衣服依次排列,第 i 件衣服的编号为 i。
第 i 件衣服有它的美观值 ai 和当前的穿戴次数 bi,每件衣服的优先值为 ai / (bi+1) ,向下取整 。不过泪爷和[初春饰利]关系非常好,初春喜欢编号为素数的衣服,所以如果某件衣服的编号为素数,那么泪爷会把这件衣服的优先值翻倍,泪爷想知道这 N 件衣服的优先值分别是多少。

Input

第一行输入一个正整数 N。(1<= N <=100)
接下来N行,每行输入两个正整数 ai,bi 。(0 <= ai , bi<= 100)

Output

输出一行,包括 N 个整数,第 i 个整数表示第 i 件衣服的优先值。

Sample Input

5
8 2
1 1
4 3
10 0
5 1

Sample Output

2 0 2 10 4

答案:

#include<stdio.h>
#include<math.h>
int main()
{int N,i,a[100],b[100],x[100],flag;scanf("%d",&N);for(i=1;i<=N;i++){scanf("%d %d",&a[i],&b[i]);x[i]=a[i]/(b[i]+1);}for(i=1;i<=N;i++){flag=0;if(i==1)printf("%d",x[i]);if(i==2)printf(" %d",2*x[i]);if(i>2){for(int j=2;j<=sqrt(i);j++){if(i%j==0){flag=1;break;}}if(flag==0)x[i]*=2;printf(" %d",x[i]);}}printf("\n");return 0;
}

御坂美琴与白井黑子


「白井黑子」 是御坂美琴的舍友,同时也是御坂美琴的超级迷妹,平时称呼美琴为"姐姐大人"。为了庆祝和美琴同寝一个月,白井黑子订购了一些“ 电脑配件 ”。但是御坂美琴接了送货员电话,在一番追问后事情败露。
白井黑子决定下次买“电脑配件”的时候,要和送货员商量好接头暗号,接头暗号是一个函数。
白井黑子定义了一个函数 F(x, y) :

  1. 当 y 不等于0时,返回 F(x, y-1)+F(x-1, y-1)。
  2. 当 y 等于0时,返回 x+1。
  3. 黑子要求送货员说一个 x, y ,然后自己回答 F(x, y) 。

Input

一行两个整数分别表示x, y。 (0<=x,y<=15)

Output

一个整数表示F(x, y)

Sample Input

3 5

Sample Output

48

答案:

#include<stdio.h>
int F(int x,int y)
{if(y!=0){return F(x,y-1)+F(x-1,y-1);}if(y==0){return x+1;}
}
int main()
{int x,y;scanf("%d %d",&x,&y);printf("%d\n",F(x,y));return 0;
}

真正的落雷

「御坂美琴」在学园都市中仅有的七名超能力者(Level 5)中排名第三。最常用的招式是「超电磁炮(Railgun)」,但是她最后的绝招是[真正的落雷]。

一天,御坂美琴来到一片nm的空地上测试落雷的威力,首会她会选择释放的威力K ,然后选择释放的中心坐标(x,y) 。 所有距离中心坐标(x,y)距离小于等于 K 的空地全部被烧焦。烧焦的空地用 '’ 表示,未烧焦的空地用 ‘.’ 表示,请你输出落雷后空地的状态。御坂美琴觉得这十分简单,所以请你千万不要想得太复杂。
御坂美琴能够控制好自己的能力,所以落雷的攻击范围保证不会超出空地。

Input

输入五个整数n , m, x , y , K 分别表示空地的大小、落雷的释放中心坐标和落雷的威力。
(1 <= n,m,x,y <= 300, 0 <= k <= 300)

Output

n 行 m 列的字符矩阵。

Sample Input

10 10 5 4 3

Sample Output

..........
...*......
..***.....
.*****....
*******...
.*****....
..***.....
...*......
..........
..........

Hint

两点间的距离:两点的横坐标之差+两点的纵坐标之差。
例如(3,5)与(7,8) 之间的距离为:|3-7|+|5-8| = 7

答案:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{int n,m,x,y,k;scanf("%d%d%d%d%d",&n,&m,&x,&y,&k);int i,j;for(i = 1; i <= n; i++){for(j = 1; j <= m; j++)if(abs(x-i)+abs(y-j)<=k)printf("*");elseprintf(".");printf("\n");}return 0;
}

御坂美琴与呱太

御坂美琴最喜欢「呱太」了,尽管她自己从来不承认。
一天御坂美琴在隔壁商店发现了新上架的呱太,作为[常盘台中学]的大小姐,她有足够多的钱把所有的呱太全部买下来。但是她现在只带了 X 元钱,美琴决定先买尽量多的呱太,如果还有剩余的呱太,那么她就再回去拿钱买剩余的呱太。她想知道现在最多能先买下多少呱太。
商店里共有 N 个呱太,第 i 个的价格为 vi 元。

Input

第一行输入一个正整数N,X(1<=N<=100 , 1 <= X <= 1000000)
第二行输入 N 个正整数,第 i 个正整数表示第 i 个呱太的价格 vi。(1 <= vi <= 9000)

Output

一个正整数,表示现在最多能先买下多少个呱太。

Sample Input

5 10
7 2 5 3 1

Sample Output

3

答案:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int s[110];
int main()
{int i,j,n,x,ans=0;scanf("%d%d",&n,&x);for(i = 1; i <= n; i++)scanf("%d",&s[i]);for(i = 1; i < n; i++)for(j = 1; j < n; j++)if(s[j]>s[j+1]){s[j] = s[j]+s[j+1];s[j+1] = s[j]-s[j+1];s[j] = s[j]-s[j+1];}for(i = 1; i <= n; i++){if(x-s[i]>0){x -= s[i];ans++;}elsebreak;}printf("%d",ans);return 0;
}

御坂美琴与伙伴们

一天御坂美琴、白井黑子、初春饰利、佐天泪子四个人在一起玩游戏,游戏规则是给一个 N*M 的方格矩阵,矩阵中有一些数字,四个人依次取数字,每次可以取走一个小方格内的数字,每个方格最多被取一次。当所有数字被取完时游戏结束,每个人的最终得分是其所取的数字之和。
每个人都想要使自己的得分尽可能多,那么你知道游戏结束后她们每个人的得分分别是多少吗?

Input
第一行输入两个正整数N,M(1<=N, M<=10)。
接下来输入一个N行M列的数字矩阵, 小格子内数字的取值范围为[1,1000]。

Output
输出一行包括4个整数,分别表示御坂美琴、白井黑子、初春饰利、佐天泪子的得分。

Sample Input

2 3
2 2 3
4 4 1

Sample Output

6 5 3 2

答案:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int s[200],num[4];
int main()
{int n,m,i,j;scanf("%d%d",&n,&m);for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)scanf("%d",&s[(i-1)*m+j]);for(i = 1; i < n*m; i++)for(j = 1; j < n*m; j++)if(s[j]<s[j+1]){s[j] = s[j]+s[j+1];s[j+1] = s[j]-s[j+1];s[j] = s[j]-s[j+1];}for(i = 1; i <= n*m; i ++)num[i%4]+=s[i];for(i = 1; i <= 4; i ++){printf("%d",num[i%4]);if(i!=4)printf(" ");}return 0;
}

一方通行与最后之作

学园都市仅有的七名超能力者(Level 5)排名第一位,能力为“矢量操作”,代号「一方通行(Accelerator)」。

某天,「最后之作」自己去商场玩耍,很晚还没有回来。「一方通行」很担心于是决定去找最后之作。
商场可以大体看作一个 NM 的矩形,墙壁和遮挡物用 '’ 表示,空白位置用 ‘.’ 表示,一方通行和最后之作的起始位置分别用 ‘A’ 和 ‘L’ 表示。(显然,他们两个人的起始位置是不可能有遮挡物的)
两人总共最多进行 K 次移动,每次移动可以用两个字符串 name 和 direction 来表示。
如果 name 为"Accelerator",表示本次是「一方通行」移动。
如果 name 为"LastOrder",表示本次是「最后之作」移动。
direction 可能为"up"或"down"或"left"或"right",分别表示向上、向下、向左、向右移动一个单位长度。
如果本次要移动的位置在商场外或者存在遮挡物,那么将不移动。如果两人中途已经相遇(坐标重合),那么之后的所有移动全部取消。
数据保证「一方通行」和「最后之作」会相遇,如果最后是「一方通行」走向「最后之作」请输出"Accelerator",如果是「最后之作」走向「一方通行」请输出"MisakaMisaka"。然后输出两人实际总共移动了多少步。

Input

首先输入两个正整数 N, M表示商场的大小。(2 <= N, M <= 100)
然后输入一个 N 行 M 列的字符矩阵。
下一行输入一个正整数 K,表示两人总共最多进行 K 次移动。 ( 1 <= K <= 100)
接下来 K 行,每行包括两个字符串,分别表示移动的角色和移动的方向。

Output

第一行输出一个字符串。
第二行输出一个正整数,表示两人实际总共移动了多少步相遇。

Sample Input

4 5
A.*..
..*..
..*..
....L
11
Accelerator down
LastOrder left
LastOrder right
LastOrder left
LastOrder left
Accelerator down
Accelerator down
Accelerator down
LastOrder up
LastOrder left
LastOrder left

Sample Output

MisakaMisaka
9

Hint

样例中,两人最终在第四行第一列相遇,最后一次移动是「最后之作」走向「一方通行」。
「一方通行」移动了3步,「最后之作」移动了6步,两人总共移动了9步。

答案:

#include<bits/stdc++.h>
using namespace std;
char s1[110];
char s2[110];
int main()
{int n,m,i,j,k,l=0;int x1,y1,x2,y2;char a[110][110];char s1[110];char s2[110];int flag=0;scanf("%d%d",&n,&m);for(i=1; i<=n; i++){for(j=1; j<=m; j++){scanf(" %c",&a[i][j]);if(a[i][j]=='A'){x1=i;y1=j;}if(a[i][j]=='L'){x2=i;y2=j;}}}scanf("%d",&k);while(k--){scanf("%s %s",s1,s2);if((strcmp(s1,"Accelerator")==0)&&flag==0){if((strcmp(s2,"down")==0)&&(a[x1+1][y1]!='*'&&x1+1<=n)){x1+=1;l++;}else if((strcmp(s2,"left")==0)&&(a[x1][y1-1]!='*'&&y1-1>=1)){y1-=1;l++;}else if((strcmp(s2,"right")==0)&&(a[x1][y1+1]!='*'&&y1+1<=m)){y1+=1;l++;}else if((strcmp(s2,"up")==0)&&(a[x1-1][y1]!='*'&&x1-1>=1)){x1-=1;l++;}if(x1==x2&&y1==y2){flag=1;}}else if((strcmp(s1,"LastOrder")==0)&&flag==0){if((strcmp(s2,"down")==0)&&(a[x2+1][y2]!='*'&&x2+1<=n)){x2+=1;l++;}else if((strcmp(s2,"left")==0)&&(a[x2][y2-1]!='*'&&y2-1>=1)){y2-=1;l++;}else if((strcmp(s2,"right")==0)&&(a[x2][y2+1]!='*'&&y2+1<=m)){y2+=1;l++;}else if((strcmp(s2,"up")==0)&&(a[x2-1][y2]!='*'&&x2-1>=1)){x2-=1;l++;}if(x1==x2&&y1==y2){flag=2;}}}if(flag==1)printf("Accelerator\n");if(flag==2)printf("MisakaMisaka\n");printf("%d\n",l);return 0;
}:

SDUT程序设计基础(一)往年期末考试题目题解(2018年)相关推荐

  1. 2018年C语言期末考试题及答案,HZNUOJ--2018年秋季学期程序设计基础(C语言)期末考试(补题)...

    Time Limit:  1 s Memory Limit:   256 MB Submission:10 AC:4 Score:3 Description 说起爱国,我就想起国歌.说起国歌,我就想起 ...

  2. c语言期末网上考试题目回岔开吗,C语言期末考试题目.doc

    <C语言期末考试题目.doc>由会员分享,可在线阅读,更多相关<C语言期末考试题目.doc(14页珍藏版)>请在人人文库网上搜索. 1.欢迎下载9.单项选择题1. 已知:int ...

  3. 程序设计基础c语言上机考试,程序设计基础C语言上机考试题第一套.DOC

    程序设计基础(C语言)上机考试题 ( 第一套A卷 ) 2006~2007学年冬学期 2007年1月 应试人声明: 我保证遵守<上海大学学生手册>中的<上海大学考场规则>,如有考 ...

  4. 山东大学软件学院2021-6 《区块链》期末考试_孔老师_fromLWT_区块链期末考试题目回忆

    前言 简单回忆记录2021学年春季学期的限选课区块链的期末考试题目,记忆可能有偏差,请谅解.相关内容为个人观点,不是正确答案- 个人观点:课程内容丰富(有请其他老师来拓展),孔老师与同学的课上互动很多 ...

  5. 程序设计实验与上机考试教程 全国计算机等级考试二级vb模拟试题,程序设计基础实验与上机考试教程...

    内容提要 前言 第1部分 Visual Basic程序设计基础实验 1.1 常用标准控件(一) 1.2 常用标准控件(二) 1.3 选择结构 1.4 循环结构 1.5 数组与字符串 1.6 子程序过程 ...

  6. MySQL期末考试题目 题目1:查询employee数据表中的第5—8行的数据;题目2:查询每个部门的员工人数以及平均工资;题目3:查询‘孙威’的基本信息,包括员工编号、所在部门名称、岗位等级以及基本

    上篇博客记录了我在mysql考试时遇到的报错,错过了考试时间[我不知道考试时间只有20分钟] 关于第二题,第三题,哪位大佬可以有点再简单的操作方法ma,或者其他方法,想学习学习,欢迎各位大佬指点指点! ...

  7. python程序设计基础教程答案山东联盟答案_Python程序设计基础 (山东联盟) 期末...

    Python 程序设计基础(山东联盟) 下面运算符中可以用来连接两个字符串的 ? 答 :+ 表达式 -15 // 4 的值是 ? 答 :-4 下面哪个不是字符串提供的方法 ? 答 :search() ...

  8. 下列可以产生斜体字的html标签是,电子科技大学《网页设计与制作》20秋期末考试题目【标准答案】...

    电子科技大学<网页设计与制作>20春期末考试 试卷总分:100  得分:100 一.单选题 (共 40 道试题,共 100 分) 1.如何产生带有数字列表符号的列表? A. B. C. D ...

  9. 程序设计基础c语言上机考试,C语言程序设计基础上机考试一题目及参考答案..doc...

    1.输入一串字符输入字符串中整数的个数输出找出一个大于给定整数m且紧随m的素数统计老年人各年龄段的人数并存到b数组中,n个人员的年龄放在a数组中.输入一串可能包含空格的字符串中数字的个数编程实现:在已 ...

  10. 数据结构期末考试题目---笔记(SYSU)

    也不知道为什么考试的时候好像脑子抽了一样,这么简单的一个题目居然慌了神没有写 结果 90分变成了80分??? 我的国奖梦啊!!! 当然这也说明我对于指针没有想象中的那么熟悉,导致了我在慌乱的情况下就没 ...

最新文章

  1. Java 事件适配器 Adapter
  2. 高性能MySQL之架构与历史(1)
  3. 如何把一段逗号分割的字符串转换成一个数组?
  4. [转]产品需求文档(PRD)的写作
  5. 【c++】重载操作符
  6. 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树
  7. 国贸专业要考计算机二级,国贸专业考计算机二级有没有必要
  8. js图片前端压缩多图上传(旋转其实已经好了只是手机端有问题要先压缩再旋转)...
  9. mysql管理命令 java_Mysql常用命令及操作
  10. 强悍的电子邮件地址(email address)正则表达式
  11. selenium浏览器操作以及对象定位
  12. C语言向文件写入学生信息并读取显示出来
  13. Android逆向工程实例 -- 善领安卓版DSA APP手势操作bug修复
  14. 乾隆年间贪污贿赂成风:皇帝敛财不逊臣子
  15. mysql提权(mof udf 反弹端口)
  16. bp神经网络预测python人口预测_BP神经网络人口预测程序(matlab实现)
  17. 华为鸿蒙系统首发设备,华为鸿蒙系统首发设备 必须支持华为,早点甩掉安卓...
  18. 教你3分钟自制音乐播放器
  19. 使用隐马尔科夫模型实现分词
  20. 简单易懂应如何快速掌握超长激光测距仪相关性能指标TFNLR20KI激光测距仪带你走进其简单的世界

热门文章

  1. 虚拟服务器添加打印机,在VMware Workstation 7虚拟机中应用主机打印机
  2. citrix终端linux,Citrix XenDesktop发布Centos 7.2桌面(六)--安装Linux VDA
  3. 2018-9-15AGV项目笔记
  4. 2021最新Java JDK1.8的安装教程
  5. PNG图片压缩对比分析
  6. 阿里云服务大规模故障:运维操作失误
  7. 【阿里云短信】开通使用
  8. 嵌入式和单片机的区别到底在哪?
  9. 下载SE78里面的图片
  10. 图扑软件2D与2.5D案例合集|智慧园区、数据中心、SMT 生产线...