2025年春季《算法分析与设计》课前热身练习题

目录

A: 90周年

B: 90周年校庆之养生操

 C: 建校90周年

 D: 计算球体积

 E: 成绩转换

 F: 求奇数的乘积

 G: 平方和与立方和

 H: 水仙花数

 I: 母牛的故事

 J: 奇数三角形

 K: 奶牛牧场

 L: 奇数统计

 M: 最萌身高差

 N: XP的电灯

 O: 价值几何

 P: 海底沉船

 Q: 粗心的小表弟

 R: 十六进制

 S: 平行四边形

 T: 临时换人

 U: 第n个数

 V: 杏林风华


A: 90周年

麓山巍巍,湘水悠悠。积蕴九秩,襟怀八方。
2024年11月1日,湖南中医药大学迎来建校90周年华诞。
为了表达对母校的祝福,现在请你编写一个程序,输入一个正整数n,输出n个“90”,每行输出一个。

输入

输入一个不超过100的正整数n。

输出

输出n行,每行包含一个“90”。

样例输入 Copy
3
样例输出 Copy
90
90
90
#include<iostream>
using namespace std;
 
int main()
{
    int t;
    cin>>t;
    while(t--)
    cout << "90\n";
    return 0;
}

B: 90周年校庆之养生操

为了庆祝湖南中医药大学建校90周年,同学们精心准备了一系列节目,其中传统保健队的中华传统养生操肯定是必不可少的。
今年养生操的最后一个动作是同学们在结束表演的同时拿出准备好的印有'9'或者'0'的数字的红绸布,快速展示给各位观众。
已知参加表演的同学一共排成n行,2*n列,其中奇数列的同学展示的是'9',偶数列的同学展示的是'0'。
请输入一个正整数n,输出最终呈现给观众的数字矩阵。

输入

单组输入。
输入一个正整数n,1<=n<=20。

输出

按照要求输出一个由'9'和'0'组成的数字矩阵。

样例输入 Copy
2
样例输出 Copy
9090
9090
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M =1e9 +7;
const int N =1e2 +5;
void solve(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        for(int j=0;j<2*n;j++){
            if(j==0||j%2==0){
                cout<<9;
            }
            else{
                cout<<0;
            }
        }
        cout<<"\n";
    } 
}
int main() {
    cin.tie(0)->sync_with_stdio(false);
    solve();
    return 0;
}

 C: 建校90周年

湖南中医药大学的前身为创办于1934年的湖南国医专科学校,1960年设立本科院校——湖南中医学院,1965年省中医药研究所整体并入(1972年重新恢复独立建制),1990年原湖南科技大学成建制并入湖南中医学院,2002年与湖南省中医药研究院合并(2022年省中医药研究院恢复独立建制),2006年经教育部批准更名为湖南中医药大学。
2024年是湖南中医药大学建校90周年,学校将于2024年11月1日校庆日举行建校90周年庆典。
为了庆祝学校建校90周年,请你编写一个程序,在屏幕上输出90两个数字,格式如下:
11111 11111
10001 10001
11111 10001
00001 10001
11111 11111
'9'和'0'之间有n个空格,1<=n<=10。

输入

单组输入。
输入一个正整数n,1<=n<=10。

输出

按照题目格式要求,输出'9'和'0'两个数字,且两个数字之间有n个空格。

样例输入 Copy
1
样例输出 Copy
11111 11111
10001 10001
11111 10001
00001 10001
11111 11111
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int M =1e9 +7;
const int N =1e2 +5;
void solve(){
	int n;
    cin>>n;
    string s="";
    for(int i=1;i<=n;i++){
    	s+=" ";
	}
    cout<<"11111"<<s<<"11111\n";
    cout<<"10001"<<s<<"10001\n";
    cout<<"11111"<<s<<"10001\n";
    cout<<"00001"<<s<<"10001\n";
    cout<<"11111"<<s<<"11111\n";
}
int main() {
    cin.tie(0)->sync_with_stdio(false);
    solve();
    return 0;
}

 D: 计算球体积

根据输入的半径值,计算球的体积。

输入

输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。

输出

输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。

样例输入 Copy
1
1.5
样例输出 Copy
4.189
14.137
提示

#define PI 3.1415927

#include <iostream>
#include <string>
#include <cmath>
#include <set>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_map>
#define p 3.1415927
using namespace std;
typedef long long ll;
const int N = 1e6 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
void solve(){
    double r,v;
    while(cin>>r){       
        v=4.0/3*p*r*r*r;
        printf("%.3f\n",v);
    }
}
int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //int t;cin>>t;while(t--)
    solve();
    return 0;
}

 E: 成绩转换

输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;

输入

输入数据有多组,每组占一行,由一个整数组成。

输出

对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。

样例输入 Copy
56
67
100
123
样例输出 Copy
E
D
A
Score is error!
#include<stdio.h>
int main() {
    int a, b;
    while (scanf("%d", & a) != EOF) {
        if (a > 100 || a < 0)
            printf("Score is error!\n");
        else {
            b = a / 10;
            switch (b) {
                case 10:
                case 9:
                    printf("A\n");
                    break;
                case 8:
                    printf("B\n");
                    break;
                case 7:
                    printf("C\n");
                    break;
                case 6:
                    printf("D\n");
                    break;
                default:
                    printf("E\n");
            }
        }
    }
    return 0;
}

 F: 求奇数的乘积

给你n个整数,求他们中所有奇数的乘积。

输入

输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。

输出

输出每组数中的所有奇数的乘积,对于测试实例,输出一行。

样例输入 Copy
3 1 2 3
4 2 3 4 5
样例输出 Copy
3
15
#include <iostream>
#include <string>
#include <cmath>
#include <set>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int N = 1e6 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
void solve(){
    int a,b,s;
    while(cin>>a){
        s=1;
        while(a--){
            scanf("%d",&b);
            if(b%2!=0)
               s*=b;
        }
        printf("%d\n",s);
    }
}
int main() {
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //int t;cin>>t;while(t--)
    solve();
    return 0;
}

 G: 平方和与立方和

给定一段连续的整数,求出它们中所有偶数的平方和以及所有奇数的立方和。

输入

输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。

输出

对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。
你可以认为32位整数足以保存结果。

样例输入 Copy
1 3
2 5
样例输出 Copy
4 28
20 152
#include <iostream>
#include <string>
#include <cmath>
#include <set>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int N = 1e6 +5;
const int M = 1e9 +7;
const int inf = 0x3fffffff;
void solve(){
    int m,n,i,x,y;
    while(scanf("%d%d",&m,&n)!=EOF){
        x=0;y=0;
        if(m>n){
            for(i=n;i<=m;i++){
                if(i%2==0)
                    x=x+i*i;
                else
                    y=y+i*i*i;
            }
        }
        else{
            for(i=m;i<=n;i++)
            {
                if(i%2==0)
                    x=x+i*i;
                else
                    y=y+i*i*i;
            }
        }
        printf("%d %d\n",x,y);
    }
}
int main() {
    //ios::sync_with_stdio(0);cin.tie(0);
    //int t;cin>>t;while(t--)
    solve();
    return 0;
}

 H: 水仙花数

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。

输入

输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

输出

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。

样例输入 Copy
100 120
300 380
样例输出 Copy
no
370 371
#include<stdio.h>
int main()
{
    int m,n,s,i,a,b,c;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        s=0;
        for(i=m;i<=n;i++)
        {
            a=i/100;
            b=i/10%10;
            c=i%10;
            if(a*a*a+b*b*b+c*c*c==i)
            {
                printf("%d ",i);
                s++;
            }
        }
        if(s!=0)
            printf("\n");
        if(s==0)
            printf("no\n");
    }
    return 0;
}

 I: 母牛的故事

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0 n=0表示输入数据的结束,不做处理。

输出

对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

样例输入 Copy
2
4
5
0
样例输出 Copy
2
4
6
#include<stdio.h>
int m(int n)
{
    if(n<=4)
    return n;
    else
    return (m(n-1)+m(n-3));
}
int main()
{
    int n,s;
    while(scanf("%d",&n)!=EOF)
    {
        s=m(n);
        if(s!=0)
        printf("%d\n",s);
    }
    return 0;
}   

 J: 奇数三角形

一个全由奇数组成的数字三角形,该三角形共有n层。
第m层包含m个从大到小且相邻两个数字相差2的奇数,第m层最后一个数的值为2m-1。
当n为2时该奇数三角形如下:
1
5 3
当n为4时该奇数三角形如下:
1
5 3
9 7 5
13 11 9 7
现在输入一个正整数n,表示奇数三角形的层数,请编写一个程序输出该奇数三角形。

输入

单组输入。
输入一个不超过100的正整数n,表示奇数三角形的层数。

输出

输出一个n层的奇数三角形(同一层中相邻的两个数字之间用一个英文空格隔开)。

样例输入 Copy
3
样例输出 Copy
1
5 3
9 7 5
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 5;
void solve(){
    int n;
    cin>>n;
    int s=1;
    int sum=s;
    for(int i=0;i<n;i++){
        for(int j=0;j<=i;j++){
            cout<<s<<" ";
            s-=2;
        }
        cout<<"\n";
        sum+=4;
        s=sum;
    }   
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

 K: 奶牛牧场

美丽的含浦有一片奶牛牧场,牧场上的牧草每天都在匀速生长。
已知这片牧场可供N1头奶牛吃D1天,也可以供N2头奶牛吃D2天(D1>D2,N1*D1>N2*D2)。
请问,这片奶牛牧场每天新生的草量可以供几头奶牛吃1天?

输入

单组输入,每组两行。
第1行输入两个正整数N1和D1,均不超过100。
第2行输入两个正整数N2和D2,均不超过100。
已知输入数据满足D1>D2且N1*D1>N2*D2。

输出

计算每天新生草量可以供多少头奶牛吃1天,输出奶牛的头数。

样例输入 Copy
20 15
25 10
样例输出 Copy
10
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 5;
void solve(){
    int n1,d1,n2,d2;
    cin>>n1>>d1>>n2>>d2;
    int s=n1*d1-n2*d2;
    cout<<s/(d1-d2)<<"\n";
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

 L: 奇数统计

请编写一个程序,统计一个二维整型数组中出现的奇数的个数,已知该数组中包含的整数全为正整数。

输入

单组输入。
第1行输入两个正整数M和N,分别表示二维整型数组的行数和列数,M和N均不超过100,且二者之间用英文空格隔开。
接下来M行,每行输入N个正整数,两两之间用英文空格隔开,每个整数均不超过1000。

输出

输出该二维整型数组中包含的奇数的个数。

样例输入 Copy
3 3
1 2 3
2 3 4
4 6 9
样例输出 Copy
4
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 5;
int a[N][N];
void solve(){
    int m,n;
    cin>>m>>n;
    int s=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cin>>a[i][j];
            if(a[i][j]%2!=0){
                s++;
            }
        }
    }
    cout<<s<<"\n";
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    solve();
    return 0;
}

 M: 最萌身高差

N个(3<=N<=1000)X星人站成一行,每个X星人的身高都是一个正整数(范围:100-300,单位:厘米)。
计算相邻两个X星人的身高差(身高差为非负数),其中最大的身高差称为最萌身高差。请编写一个程序输出由N个X星人排成的这一行的最萌身高差。

输入

单组输入。
第1行输入一个正整数N(3<=N<=1000)。
第2行输入N个正整数,分别表示每一个X星人的身高,每一个正整数的范围为[100, 300],两两之间用英文空格隔开。

输出

输出一个非负整数表示这一行X星人的最萌身高差。

样例输入 Copy
5
120 178 156 172 200
样例输出 Copy
58
#include <stdio.h>
#include <stdlib.h>
#define N 1005
int a[N];
void solve() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int m = -1;
    for (int i = 0; i < n - 1; i++) {
        int d = abs(a[i + 1] - a[i]);
        if (d > m) {
            m = d;
        }
    }
    printf("%d\n", m);
}
int main() {
    solve();
    return 0;
}

 N: XP的电灯

XP最近发现一个很好玩的问题。现在有N盏电灯,序号为1到N,最开始的时候所有电灯都是关闭的。XP有一群同学,序号是(1~K),这些调皮的同学会去按电灯的开关,每个同学按开关符合一种规律。序号为1的同学会按下序号是1的倍数的灯的开关,序号是2的同学会按下序号是2的倍数的灯的开关(将关的灯打开,开的灯关闭)。现在XP有K位同学,每位同学都去操作一次,问最后有多少盏灯是亮着的?

输入

每行输入两个整数,N,K(K<=N<=1000)

输出

每行输入一个整数,表示打开电灯的数量。

样例输入 Copy
2 2
10 10
样例输出 Copy
1
3
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 5;
int a[N];
void solve(){
    int n, k;
    while (cin >> n >> k)
    {
        memset(a,0,sizeof a);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= k; j++)
                if (i % j == 0)
                {
                    if (a[i])
                        a[i] = 0;
                    else
                        a[i] = 1;
                }
        int s = 0;
        for (int i = 1; i <=n; i++)
            if (a[i])
                s++;
        cout << s << "\n";
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

 O: 价值几何

鸡兔共笼问题是一个非常经典的数学问题。
现在告诉你笼子中的鸡和兔共有m只,脚共有n只,且已知鸡的价格为每只100元,兔子的价格为每只150元。
请问这一笼鸡和兔共值多少钱?
如果问题无解则输出“No solution”。
1<=m<=1000,1<=n<=1000。

输入

两个整数m和n(意义如题目描述所示),用空格分隔

输出

如果问题有解,则输出一个整数,表示这一笼鸡和兔共值多少钱。
如果问题无解,则输出“No solution”(没有引号)

样例输入 Copy
5 16
样例输出 Copy
650
#include<stdio.h>
int main()
{
    int m,n,x,y,s,z=0;
    scanf("%d%d",&m,&n);
    for(x=0;x<=m;x++)
        for(y=0;y<=m;y++)
        {
            if(x+y==m&&2*x+4*y==n)
                {
                    s=100*x+150*y;
                    printf("%d\n",s);
                    z++;
                }
        }
        if(z==0)
        printf("No solution\n");
        return 0;
}

 P: 海底沉船

X星人在一艘海底沉船上发现了很多很多很多金币,可爱的X星人决定用这些金币来玩一个填格子的游戏。
其规则如下:第1个格子放2枚金币,第2个格子放6枚金币,第3个格子放12枚金币,第4个格子放20枚金币,第5个格子放30枚金币,以此类推。
请问放到第n个格子时一共放了多少枚金币?

输入

多组输入。每组一个正整数n,表示最后一个格子的编号。(n<=100)

输出

对于每一组输入,输出从第1个格子到第n个格子的总金币数。

样例输入 Copy
1
3
样例输出 Copy
2
20
#include<stdio.h>
int main()
{
    int n,i,s;
    while(scanf("%d",&n)!=EOF)
    {
        s=0;
        for(i=1;i<=n;i++)
            s=s+(i*i+i);
        printf("%d\n",s);
    }
    return 0;
}

 Q: 粗心的小表弟

今天英语课,小表弟的英语老师教了他三个与动物有关的单词,分别是cat、pig和horse,但是粗心的小表弟在写这三个单词的时候经常会写错。
假如小表弟每个单词最多写错一个字母(当然有时候也是会全部写对的,且字母个数是完全正确的)。
你能否编写一个程序,对小表弟写的单词进行自动纠错。

输入

单组输入。
输入一个可能存在单个字母错误的单词。

输出

输出与输入对应的正确单词。

样例输入 Copy
hoose
样例输出 Copy
horse
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cstring>
#include <stack>
#include <cmath>
#include <unordered_map>
#define ll long long
#define MM 0x3f3f3f3f
using namespace std;
const int N = 2e5 + 5;
const int P = 131;
int a[3][200005];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    string s;
    cin >> s;
    if (s.size() == 5)
        cout << "horse" << '\n';
    else if ((s[0] == 'c' && s[2] == 't') || (s[0] == 'c' && s[1] == 'a') || (s[1] == 'a' && s[2] == 't'))
        cout << "cat" << '\n';
    else
        cout << "pig" << '\n';
    return 0;
}

 R: 十六进制

小米同学最近在学习进制转换。众所周知,在表示十六进制数时,除了0-9这九个阿拉伯数字外,还引入了“A”、“B”、“C”、“D”、“E”和“F”这六个英文字母(不区分大小写)。
现在给你一个十进制正整数,请问在将其转换为十六进制之后,对应的十六进制表示中有多少位是字母?

输入

单组输入。
输入一个十进制正整数N(N<=10^6)。

输出

输出将N转换成十六进制数字后所包含的字母位的数量,如果没有字母位则输出0。

样例输入 Copy
20
样例输出 Copy
0
#include<stdio.h>
int main()
{
    int n,s,i=0;
    scanf("%d",&n);
    while(n>0)
    {
        s=n%16;
        if(s>9)
            i++;
        n/=16;
    }
    printf("%d\n",i);
    return 0;
}

 S: 平行四边形

Kimi想用“*”号构成一个平行四边形并在屏幕上输出。
当输入一个大于等于2的正整数N时,屏幕上将显示一个由N*N个“*”组成的平行四边形。
例如:输入3,输出如下平行四边形。
  ***
 ***
***

输入

输入一个正整数N,1<N<=100。

输出

输出一个N行,每行N个“*”组成的平行四边形。

样例输入 Copy
3
样例输出 Copy
  ***
 ***
***
#include<stdio.h>
int main()
{
    int n,i,s,t;
    scanf("%d",&n);
    s=n;
    t=n;
    while(n--)
    {
        s--;
    for(i=0;i<s;i++)
        printf(" ");
    for(i=0;i<t;i++)
        printf("*");
    printf("\n");
    }
    return 0;
}

 T: 临时换人

因为某些原因,Jack和Rose没有办法参加毕业演出,他们两个的工作任务都将由劳模Tom来代替。
现在需要更新演职人员名单,将所有的Jack和Rose替换成Tom。
请你编写一段程序实现人员替换功能。

输入

单组输入。
输入一个字符串(可能有空格,字符串长度<=1e5),包含若干Jack和Rose。

输出

输出替换之后的字符串。

样例输入 Copy
Cameraman: Jack, Lighting engineer: Rose.
样例输出 Copy
Cameraman: Tom, Lighting engineer: Tom.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cstring>
#include <stack>
#include <cmath>
#include <unordered_map>
#define ll long long
#define MM 0x3f3f3f3f
using namespace std;
const int N = 1e2 + 5;
const int P = 131;
int dx[8] = {0, 0, -1, 1, -1, -1, 1, 1};
int dy[8] = {1, -1, 0, 0, 1, -1, 1, -1};
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    string a;
    getline(cin,a);
    for(int i=0; i<a.size()-4; i++)
        if((a[i]=='J'&&a[i+1]=='a'&&a[i+2]=='c'&&a[i+3]=='k')||(a[i]=='R'&&a[i+1]=='o'&&a[i+2]=='s'&&a[i+3]=='e'))
            a=a.replace(i,4,"Tom");
    cout<<a<<"\n";
    return 0;
}

 U: 第n个数

自从学了素数以后,明明喜欢上了数字2、3和5。当然,如果一个数字里面只出现2、3和5这三个数字,他也一样喜欢,例如222、2355、223355。
现在他希望你能够帮他编写一个程序,快速计算出由2、3、5这三个数字组成的由小到大的第n个数,当然也包括2、3和5。

输入

每组输入数据占1行,每行输入一个正整数n。(n<=1000)

输出

每组输出数据占1行,即满足要求的第n个数。

样例输入 Copy
3
样例输出 Copy
5
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    queue<long long> a;
    cin >> n;
    a.push(2);
    a.push(3);
    a.push(5);
    for (int i = 1; i < n; i++)
    {
        long long t = a.front();
        a.pop();
        a.push(t * 10 + 2);
        a.push(t * 10 + 3);
        a.push(t * 10 + 5);
    }
    cout << a.front() << "\n";
    return 0;
}

 V: 杏林风华

题目描述



2024年11月1日,湖南中医药大学迎来建校90周年华诞,学校举行了隆重的庆祝仪式。
1934年,于山河破碎的战火中,在中医废止的争论中,湖南中医药大学的前身湖南国医专科学校创建,誓要捍卫与复兴中医药事业。
现在以1934年11月1日中午12时0分0秒作为起点,按照年-月-日 时:分:秒的格式输入一个1934年11月1日中午12时0分0秒以后的时间,请编写一个程序计算中间一共经历了多少秒?

输入

单组输入。
输入一个时间,格式为:YYYY-MM-DD HH:mm:SS,其中YYYY表示年,MM表示月,DD表示日,HH表示时(24小时制,范围为0-23),mm表示分,SS表示秒。

输出

输出从1934年11月1日中午12时0分0秒开始到输入的时间之间一共经历了多少秒?

样例输入 Copy
1934-11-02 12:00:00
样例输出 Copy
86400

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int mm[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int fun(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
int fun1(int y, int m) {
    if (m == 2 && fun(y)) {
        return 29;
    }
    return mm[m];
}
long long fun2(int y, int m, int d, int h, int mi, int s) {
    long long t = 0;
    for (int i = 1; i < y; i++) {
        t += fun(i) ? 366 : 365;
    }
    for (int i = 1; i < m; i++) {
        t += fun1(y, i);
    }
    t += d - 1;
    long long ss = t * 86400LL;
    ss += h * 3600LL;
    ss += mi * 60LL;
    ss += s;
    return ss;
}
void solve() {
    int y,m,d,h,mi,ss;
    scanf("%d-%d-%d %d:%d:%d",&y,&m,&d,&h,&mi,&ss);
    long long s1 = fun2(1934, 11, 1, 12, 0, 0);
    long long s2 = fun2(y, m, d, h, mi, ss);
    printf("%lld\n", s2 - s1);
}
int main() {
    solve();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值