01 空间
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都是 32 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB 的空间可以存储多少个 32 位二进制整数?
运行限制
最大运行时间:1s
最大运行内存: 128M
解析
1MB = 1024KB ``1KB = 1024字节(byte) 1字节 = 8位(bits)
一个32位的整数为四字节。 注意溢出问题
#include <stdio.h>
int main()
{
long long int a;
long long int b;
a=256*1024*1024;
b=a/4;
printf("%lld",b);
return b;
}
02 蛇形填数
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列的数是多少?
运行限制
最大运行时间:1s
最大运行内存: 128M
解析
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
/*
1 2 6 7 15 ...
3 5 8 14 ...
4 9 13 ...
10 12 ...
11 ...
...
分析可以知道
(1)第一行,第一列 1 = 0*0 + 1*1;
(2)第二行,第二列 5 = 1*1 + 2*2;
(3)第三行,第三列 13 = 2*2 + 3*3;
....
(20)第20行,第20列 ? = 19*19 + 20*20;
*/
printf("%d",19*19 + 20*20);
return 0;
}
03 组队
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。
每位球员担任 1 号位至 5号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
图片描述
运行限制
最大运行时间:1s
最大运行内存: 128M
#include <iostream>
using namespace std;
int one[20] = {97, 92, 0, 0, 89, 82, 0, 0, 0, 95, 0, 0, 94, 0, 0, 0, 98, 93, 0, 0};
int two[20] = {90, 85, 0, 0, 83, 86, 0, 97, 0, 99, 0, 0, 91, 83, 0, 0, 83, 87, 0, 99};
int three[20] = {0, 96, 0, 0, 97, 0, 0, 96, 89, 0, 96, 0, 0, 87, 98, 0, 99, 92, 0, 96};
int four[20] = {0, 0, 0, 80, 0, 0, 87, 0, 0, 0, 97, 93, 0, 0, 97, 93, 98, 96, 89, 95};
int five[20] = {0, 0, 93, 86, 0, 0, 90, 0, 0, 0, 0, 98, 0, 0, 98, 86, 81, 98, 92, 81};
int main()
{
int maxsum=0;
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
if(j==i) continue;
for(int k=0;k<20;k++){
if(k==i||k==j) continue;
for(int m=0;m<20;m++){
if(m==i||m==j||m==k) continue;
for(int n=0;n<20;n++){
if(n==i||n==j||n==k||n==m) continue;
if((one[i]+two[j]+three[k]+four[m]+five[n])>maxsum)
maxsum=one[i]+two[j]+three[k]+four[m]+five[n];
}
}
}
}
}
cout<<maxsum<<endl;
return 0;
}
04 裁纸刀
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。
小蓝用一张纸打印出两行三列共 6 个二维码,至少使用九次裁出来,下图给出了一种裁法。
图片描述
在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁 4 次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。
如果小蓝要用一张纸打印出 20 行 22 列共 440 个二维码,他至少需要裁多少次?
运行限制
最大运行时间:1s
最大运行内存: 256M
解析
找规律,一个二维码是0+外围4刀,两个是1+4,四个是3+4,六个是5+4
#include <iostream>
using namespace std;
int main()
{
int s;
s=440+4-1;cout<<s;
// 请在此输入您的代码
return 0;
}
05 时间显示
题目描述
小蓝要和朋友合作开发一个时间显示的网站。
在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 11 月 11 日 00:00:00到当前时刻经过的毫秒数。
现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。
给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入描述
输入一行包含一个整数,表示时间。
输出描述
输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值为 0 到 23,MM 表示分,值为 0 到 59,S 表示秒,值为 0 到 59。时、分、秒 不足两位时补前导 0。
输入输出样例
示例 1
输入
46800999
输出
13:00:00
示例 2
输入
1618708103123
输出
01:08:23
的正整数。
运行限制
最大运行时间:1s
最大运行内存: 512M
#include <iostream>
using namespace std;
const int dayTime = 24 * 60 * 60; //记录一天有多少秒
int main()
{
long long time;
cin>>time;
//可忽略毫秒数,先将毫秒转化成秒,后面不满1秒的毫秒数自动忽略例如
//(999毫秒不足一秒(1000毫秒),可忽略)
time = time / 1000;
//计算最后一天的时间 看最后一天多少秒 不满3600秒的不算作一天
//算作是余数
time = time % dayTime;
int h = time / 3600; //计算这个余数包含多少个小时
time = time % 3600; //不足3600秒的当作是余数,取余得出不足一小时的秒数
int m = time / 60; //上一步取余得到后的数包含多少分钟
int s = time % 60;//取余得到 不足1分钟的秒数
//1,618,708,103
//86,400
printf("%02d:%02d:%02d",h,m,s);
return 0;
}
06 既约分数
#include<stdio.h>
int s(int a,int b)
{
if(a%b==0) return b;
else return s(b,a%b);
}
int main()
{
int sum=0;
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if(s(i,j)==1)
sum++;
}
}
printf("%d",sum);
return 0;
}
07 特别数的和
示例
输入
40
输出
574
#include <stdio.h>
int main()
{
int n,i,j,k,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
j=i;
while(j)
{
k=j%10;
if(k==2 || k==0 || k==1 || k==9)
{
s=s+i;
break;
}
j=j/10;
}
}
printf("%d",s);
}
08 年号字串
#include <iostream>
using namespace std;
/10进制转26进制
/*
2019 / 26 = 77 2019 % 26 = 17=Q
77 / 26 = 2 77 % 26 = 25=Y
2=B
最终答案:BYQ
*/
void solve(int n)
{
if(!n)
{
return;
}
solve(n/26);
cout<<(char)(n%26+64);
}
int main()
{
// 请在此输入您的代码
solve(2019);
return 0;
}
09 排列字母
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char t;
int i,j;
scanf("%s",a);
for(i=0;i<strlen(a)-1;i++){
for(j=0;j<strlen(a)-1-i;j++){
if(a[j]>a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("%s",a);
return 0;
}
10 ASC
#include <iostream>
using namespace std;
int main()
{
printf("%d",'L');
return 0;
}