目录
L1-086 斯德哥尔摩火车上的题
上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:
s = '' a = '1112031584' for (i = 1; i < length(a); i++) { if (a[i] % 2 == a[i-1] % 2) { s += max(a[i], a[i-1]) } } goto_url('www.multisoft.se/' + s)
其中字符串的 + 操作是连接两个字符串的意思。所以这道题其实是让大家访问网站 www.multisoft.se/112358(注意:比赛中千万不要访问这个网址!!!)。
当然,能通过上述算法得到 112358 的原始字符串 a 是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?
输入格式:
输入为两行仅由数字组成的非空字符串,长度均不超过 10^4 ,以回车结束。
输出格式:
对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。
输入样例1:
1112031584
011102315849输出样例1:
112358
输入样例2:
111203158412334
12341112031584输出样例2:
1123583
112358
#include <stdio.h>
#include <string.h>
int main()
{
char s1[10001],s2[10001];
char res1[10001],res2[10001];
gets(s1);
gets(s2);
int point=0;
for(int i=1;i<strlen(s1);i++)
{
if((s1[i]-48)%2==(s1[i-1]-48)%2)
{
res1[point]=(s1[i]>s1[i-1])?s1[i]:s1[i-1];
point++;
}
}
point=0;
for(int i=1;i<strlen(s2);i++)
{
if((s2[i]-48)%2==(s2[i-1]-48)%2)
{
res2[point]=(s2[i]>s2[i-1])?s2[i]:s2[i-1];
point++;
}
}
if(strcmp(res1,res2)==0)
puts(res1);
else{
puts(res1);
puts(res2);
}
return 0;
}
注意事项:
对给定字符串逐个字符(从第2个字符开始)读取,判断该字符和上一个字符是否奇偶性相同,相同则输出二者中较大的一个数。
如有疑问,欢迎提出。
L1-087 机工士姆斯塔迪奥
在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。
你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。
给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。
输入格式:
输出格式:
输出一个数,表示安全格子的数量。
输入样例:
5 5 3
0 2
0 4
1 3输出样例:
12
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,m,q;
scanf("%d %d %d",&n,&m,&q);
char *map;
map=(char *)malloc(n*m*sizeof(char));
for(int i;i<q;i++)
{
int t,c;
scanf("%d %d",&t,&c);
if(t==0)
{
for(int j=0;j<m;j++)
map[(c-1)*m+j]='$';
}
else
{
for(int j=0;j<n;j++)
map[j*m+(c-1)]='$';
}
}
int count=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(map[i*m+j]!='$')
count++;
printf("%d",count);
return 0;
}
注意事项:
把boss能攻击到的格子做上标记,剩余格子数即为所求。
如有疑问,欢迎提出。
L1-088 静静的推荐
天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:
只考虑得分不低于 175 分的学生;
一共接受 K 批次的推荐名单;
同一批推荐名单上的学生的成绩原则上应严格递增;
如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。
给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?
输入格式:
输出格式:
在一行中输出静静姐最多能向企业推荐的学生人数。
输入样例:
10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100输出样例:
8
样例解释:
第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。
#include <stdio.h>
int main()
{
int n,k,s,count=0;
scanf("%d %d %d",&n,&k,&s);
int pici[291]={0}; //记录各分数消耗的批次数
for(int i=0;i<n;i++)
{
int gplt,pat;
scanf("%d %d",&gplt,&pat);
if(gplt>=175&&pat>=s) //两种考试均满足要求,免批次数进入名单
count++;
else if(gplt>=175&&pici[gplt]<k) //仅gplt分数满足要求,若有批次数剩余则进入名单
{
count++;
pici[gplt]++;
}
}
printf("%d",count);
return 0;
}
注意事项:
同一批名单上的学生分数不能相同,两种考试成绩均满足要求的学生免批次进入推荐名单,如果只有gplt分数满足要求,并且有批次剩余则该学生可以进入推荐名单。有k批次相当于每个gplt达标分数(175~290分)可以进k位同学。
如有疑问,欢迎提出。
L4-103 就不告诉你
做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。
输入格式:
输入在第一行给出两个不超过 1000 的正整数 A 和 B,其间以空格分隔。
输出格式:
在一行中倒着输出 A 和 B 的乘积。
输入样例:
5 7
输出样例:
53
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,i=0;
int res;
scanf("%d %d",&a,&b);
res=a*b;
int num[10000];
while(res!=0)
{
num[i]=res%10;
i++;
res/=10;
}
int temp=i;
for(int j=0;j<i;j++)
{
res+=num[j]*pow(10,temp-1);
temp--;
}
printf("%d",res);
return 0;
}
注意事项:
将计算结果不断对10取余然后输出的话,没考虑前导0,所以不能通过所有测试点。
如有疑问,欢迎提出。
L4-104 Wifi密码
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项,有且只有 1 个正确答案。
输入格式:
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行按照 编号-答案 的格式给出一道题的 4 个选项,T 表示正确选项,F 表示错误选项。选项间用空格分隔。
输出格式:
在一行中输出 wifi 密码。
输入样例:
8
A-T B-F C-F D-F
C-T B-F A-F D-F
A-F D-F C-F B-T
B-T A-F C-F D-F
B-F D-T A-F C-F
A-T C-F B-F D-F
D-T B-F C-F A-F
C-T A-F B-F D-F输出样例:
13224143
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
getchar();
char ans[100];
for(int i=0;i<n;i++)
{
gets(ans);
for(int j=2;j<=14;j+=4)
{
if(ans[j]=='T')
{
int res;
switch(ans[j-2])
{
case 'A':res=1;break;
case 'B':res=2;break;
case 'C':res=3;break;
case 'D':res=4;break;
}
printf("%d",res);
break;
}
}
}
return 0;
}
注意事项:
每道题的选项不一定是按A-B-C-D的顺序来的。
switch函数那里,可以根据字符和整型的大小关系进一步优化,如 res=ans[j-2]-64; 。
如有疑问,欢迎提出。