项目 | 题型 | 分值 | 题型 |
---|---|---|---|
第一题 | 结果填空 | 5 | 模拟 |
第二题 | 结果填空 | 5 | |
第三题 | 结果填空 | 10 | |
第四题 | 结果填空 | 10 | |
第五题 | 结果填空 | 15 | |
第六题 | 程序设计 | 15 | |
第七题 | 程序设计 | 20 | |
第八题 | 程序设计 | 20 | |
第九题 | 程序设计 | 25 | |
第十题 | 程序设计 | 25 |
问题描述
小明要做一个跑步训练,初始时,小明充满体力,体力值计为 10000。
如果小明跑步,每分钟损耗 600 的体力。
如果小明休息,每分钟增加 300 的体力。
体力的损耗和增加都是 均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。
如果某个时刻小明的体力到达 0,他就停止锻炼, 请问小明在多久后停止锻炼。
为了使答案为整数,请以秒为单位输出答案,答案中只填写数,不填写单位。
答案提交
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
每分钟损耗600的体力的话,每秒钟损耗10的体力,当体力不足600时,剩余多少体力就损耗多少,到不了600。
#include
using namespace std;
int main()
{
int n=10000;
int t=0;
while(n){
if(n>600){
n-=600;
t+=60;
n+=300;
t+=60;
}else{
t+=n/10;
break;
}
}
cout<<t<<endl;
} // namespace std;
问题描述
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包含多少分钟?
方便解法
代码实现
/* 问题描述
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包含多少分钟?
*/
#include
using namespace std;
int day1,day2,day3;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool is_leap(int year){
if(year%400==0||(year%4==0&&year%100!=0))return true;
else return false;
}
int get_days(int year,int month){
if(month==2){
return 28+is_leap(year);
}
else{
return days[month];
}
}
int main()
{
//从1921/7/24到1921/12/31的天数
int day1=8+31+30+31+30+31;
//从2020/1/1到2020/6/31的天数
int day2=31+28+31+30+31+31;
//从1922/1/1到2019/12/31的天数
for(int i=1922;i<=2019;i++){
for(int j=1;j<=12;j++){
day3+=get_days(i,j);
}
}
cout<<day1<<endl;
cout<<day2<<endl;
cout<<day3<<endl;
cout<<(day1+day2+day3+1)*24*60<<endl;
} // namespace std;
excel数天数的话记得最后加1
题目描述
cpp代码确实不好实现。用python吧。
REPEAT
替换为for i in range(
:
替换为):
答案:241830
问题描述
把 1 ∼ 2020 放在 2 × 1010 的矩阵里。
要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。
如果要放置的话一定要从最左边开始放,并且是先是第一行的最左边,再放第二行的最左边。
确定状态转移量dp[i][j]
其中i
是第一行所放数的个数,j
是第二行所放数的个数.
数放第一行的时候的时候,dp[i][j]+=dp[i-1][j]
数放第二行的时候的时候,dp[i][j]+=dp[i][j-1]
#include
using namespace std;
int f[1020][1020];
int main()
{
f[0][0] = 1; // 两行一个数字都不放,也是一种方案
for (int i = 0; i <= 1010; i ++)
for (int j = 0; j <= i; j ++)
{
if(i - 1 >= j) // 转移前的状态也要合法,即第一行的数量不小于第二行的数量
f[i][j] += f[i - 1][j] % 2020;
if(j - 1 >= 0)
f[i][j] += f[i][j - 1] % 2020;
}
cout << f[1010][1010] << endl;
return 0;
}
答案:1340
#include
using namespace std;
typedef long long ll;
ll n;
int main()
{
cin>>n;
while(n){
cout<<n<<" ";
n/=2;
}
return 0;
} // namespace std;
#include
using namespace std;
int main()
{
string s;
cin>>s;
int len=s.size();
cout<<s[0];
for(int i=1;i<len;i++){
if(s[i]>'0'&&s[i]<='9'){
for(int j=1;j<s[i]-'0';j++){
cout<<s[i-1];
}
}
else{
cout<<s[i];
}
}
return 0;
} // namespace std;