1

算法竞赛入门【码蹄集新手村600题】(MT1101-1150)

 1 year ago
source link: https://blog.51cto.com/u_15745546/5623719
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

算法竞赛入门【码蹄集新手村600题】(MT1101-1150)




为什么突然想学算法了?

> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~

算法竞赛入门【码蹄集新手村600题】(MT1101-1150)_算法


为什么选择码蹄集作为刷题软件?

码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。

算法竞赛入门【码蹄集新手村600题】(MT1101-1150)_c/c++_02

1. MT1101 带参数的宏II

(1)题目描述
请编写一个简单程序,把f(x)=x*(x-1)定义成带参数的宏,从键盘输入a,b,将a+b的和作为宏实参计算并输出结果。

输入格式: 输入整型,空格分隔。
.
输出格式: 输出为实型

输入格式: 3 5
.
输出格式: 56.000000

(2)参考代码

#include<bits/stdc++.h> 
#define f(x) x*(x-1)
using namespace std;

int main( )
{
    int a,b,ans;
    scanf("%d %d",&a,&b);
    ans=a+b;
    printf("%lf",(double)f(ans));
    return 0;
}

2. MT1102 长方体

(1)题目描述
将长方体体积计算公式定义为宏。在主函数中输入长方体长、宽、高求体积。不考虑不合理的输入或是溢出等特殊情况。

输入格式: 输入为实型(正数),空格分隔。
.
输出格式: 输出为实型

输入格式: 3 4 5
.
输出格式: 60.000000

(2)参考代码

#include<bits/stdc++.h> 
#define f(x,y,z) x*y*z
using namespace std;

int main( )
{
    double x,y,z;
    scanf("%lf %lf %lf",&x,&y,&z);
    printf("%lf",f(x,y,z));
    return 0;
}

3. MT1103 球体积

(1)题目描述
将球体积计算公式定义为宏。在主函数中输入半径求体积。

输入格式: 输入为实型
.
输出格式: 输出为实型

输入格式:3.5
.
输出格式: 179.594228

(2)参考代码

#include<bits/stdc++.h> 
#define f(x) 3.14159*4/3*x*x*x
using namespace std;

int main( )
{
    double x;
    cin>>x;
    printf("%lf",f(x));
    return 0;
}

4. MT1104 三角形

(1)题目描述
算法竞赛入门【码蹄集新手村600题】(MT1101-1150)_c/c++_03

输入格式: 输入为实型
.
输出格式: 输出为实型

输入格式: 3 4 5
.
输出格式: 6.000000

(2)参考代码

#include<bits/stdc++.h> 
#define f(a,b,c,p) sqrt(p*(p-a)*(p-b)*(p-c))
using namespace std;

int main( )
{
    double a,b,c,p;
    cin >> a >> b >>c;
    p=0.5*(a+b+c);
    if(a+b<=c || a+c<=b || b+c<=a) printf("-1");
    else printf("%lf",f(a,b,c,p));
    return 0;
}

5. MT1105 英寸英尺英里

(1)题目描述
定义关于长度的宏,英寸/厘米、英尺/米、英里/公里,计算英制与公制单位转换,在主函数中输入数据输出计算结果。假定1英寸=2.54厘米、1英尺=0.31米、1英里=1.61公里。

输入格式: 输入英寸、英尺、英里为实型,空格分隔。
.
输出格式:输出厘米、米、公里为实型,空格分隔。保留2位小数。

输入格式: 1 1 1
.
输出格式: 2.54 0.31 1.61

(2)参考代码

#include<bits/stdc++.h> 
#define f(x) x*2.54
#define g(x) x*0.31
#define z(x) x*1.61
using namespace std;

int main( )
{
    double x,y,z;
    cin >> x >> y >> z;
    printf("%.2lf %.2lf %.2lf",f(x),g(y),z(z));
    return 0;
}

6. MT1106 盎司磅

(1)题目描述
定义关于重量的宏,盎司/克、磅/公斤,计算美制单位与公制转换,在主函数中输入数据输出计算结果。

输入格式:输入盎司、磅为实型,空格分隔
.
输出格式:输出克、公斤实型,空格分隔。保留2位小数。

输入格式:1 1
.
输出格式: 28.35 0.45

(2)参考代码

#include<bits/stdc++.h> 
#define f(x) x*28.35
#define g(x) x*0.45
using namespace std;

int main( )
{
    double x,y;
    cin >> x >> y;
    printf("%.2lf %.2lf",f(x),g(y));
    return 0;
}

7. MT1107 加仑/升

(1)题目描述
定义关于容量的宏,加仑/升,计算单位转换,在主函数中输入数据输出计算结果。

输入格式: 输入加仑为实型。
.
输出格式: 输出升为实型,保留2位小数。

输入格式: 1
.
输出格式: 3.79

(2)参考代码

#include<bits/stdc++.h> 
#define f(x) x*3.79
using namespace std;

int main( )
{
    double x;
    cin >> x;
    printf("%.2lf",f(x));
    return 0;
}

8. MT1108 保留小数

(1)题目描述
将一个浮点型K数保留n(1≤n≤5)位小数(四舍五入)的算法定义为宏。在主函数中输入数据输出计算结果。

输入格式: 输入k为实型,n为整数,空格分隔。
.
输出格式: 输出为实型

输入格式: 3.1415926 3
.
输出格式: 3.142

(2)参考代码

#include<bits/stdc++.h> 
using namespace std;

int main( )
{
    double k;
    int n;
    cin >> k >> n;
    cout << fixed << setprecision(n) << k << endl;
    return 0;
}

9. MT1109 和10相比

(1)题目描述
请编写一个简单程序,输入一个整数,和10比较,输出比较结果

输入格式: 输入整型
.
输出格式: 输出…大于或者等于或者小于10

输入格式: 1
.
输出格式: 1小于10

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x;
    cin >> x;
    if(x<10) cout << x <<"小于" <<10;
    else if(x==10) cout << x <<"等于" <<10;
    else cout << x <<"大于" <<10;
    return 0;
}

10. MT1110 最小值

(1)题目描述
输入a,b两个整数,输出他们之间的最小值

输入格式: 输入2个整数用空格分隔
.
输出格式:输出为整型

输入格式:2 8
.
输出格式: 2

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a,b;
    cin >> a >> b;
    if(a<b) cout << a;
    else cout << b;
    return 0;
}

11. MT1111 最大值

(1)题目描述
输入a,b两个整数,输出他们之间的最大值

输入格式: 输入2个整数用空格分隔
.
输出格式: 输出为整型

输入格式: 2 8
.
输出格式: 8

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a,b;
    cin >> a >> b;
    if(a>b) cout << a;
    else cout <<b;
    return 0;
}

12. MT1112 中庸之道

(1)题目描述
请编写一个简单程序,输入3个整数,比较他们的大小,输出中间的那个数

输入格式: 输入整型,空格分隔
.
输出格式: 输出整型

输入格式: 1 5 3
.
输出格式: 3

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int dp[1000],a,b,c;
    for(int i=1;i<=3;i++) cin >> dp[i];
    sort(dp+1,dp+1+3);
    cout << dp[2] <<endl;
    return 0;
}

13. MT1113 三人同行

(1)题目描述
三人同行,输入他们的年龄,输出最年长者的年龄

输入格式: 输入整型,空格分隔
.
输出格式: 输出整型

输入格式: 1 66 70
.
输出格式: 70

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int dp[1000],a,b,c;
    for(int i=1;i<=3;i++) cin >> dp[i];
    sort(dp+1,dp+1+3);
    cout << dp[3] <<endl;
    return 0;
}

小结(一)

经典范例:

  1. 进制转换:MT1106、MT1107
  2. 四舍五入:MT1108

14. MT1114 偶数还是奇数

(1)题目描述
请编写一个简单程序,检查一个正整数是偶数还是奇数,如果是偶数输出Y,否则输出N。(不考虑0)

输入格式: 输入整型
.
输出格式: 输出Y或者N

输入格式: 4
.
输出格式: Y

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a;
    cin >> a;
    if(a%2==0) cout << "Y";
    else cout << "N";
    return 0;
}

15. MT1115 小于m的偶数

(1)题目描述
判断n是否为小于m的偶数,不考虑0,负数或者其他特殊情况。

输入格式: 输入为整型n、m,空格分隔
.
输出格式: 是则输出YES否则输出NO

输入格式: 3 6
.
输出格式: NO

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m;
    cin >> n >> m;
    if(n<m&&n%2==0) cout << "YES";
    else cout << "NO";
    return 0;
}

16. MT1116 正整数

(1)题目描述
判断n是否为两位数的正整数

输入格式: 输入为整型n
.
输出格式: 是则输出YES否则输出NO

输入格式: 11
.
输出格式: YES

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    if(n>9&&n<100) cout<<"YES";
    else cout<<"NO";
    return 0;
}

17. MT1117 两个负数

(1)题目描述
判断x、y、z中是否有两个负数。

输入格式: 输入为整型x、y、z,空格分隔
.
输出格式: 是则输出YES否则输出NO

输入格式: 1 2 3
.
输出格式: NO

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x,y,z,num=0;
    cin >> x >> y >>z;
    if(x<0) ++num;
    if(y<0) ++num;
    if(z<0) ++num;
    if(num==2) cout<<"YES";
    else cout<<"NO";
    return 0;
}

18. MT1118 等差数列

(1)题目描述
判断a、b、c是否为一个等差数列中的连续三项。

输入格式: 输入为整型a、b、c,空格分隔
.
输出格式: 是则输出YES否则输出NO

输入格式: 1 2 3
.
输出格式: YES

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a,b,c;
    cin >> a >> b >> c;
    if(b-a==c-b) cout<<"YES";
    else cout<<"NO";
    return 0;
}

19. MT1119 大小写的转换

(1)题目描述
请编写一个简单程序,实现输入字符大小写的转换。其他非法输入(非字母的输入)则原样输出。

输入格式: 输入字符型
.
输出格式: 输出字符型

输入格式: A
.
输出格式: a

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char ch;
    cin >> ch;
    if(ch >= 'A' && ch<='Z') ch+=32;
    else if(ch >= 'a' && ch<='z') ch-=32;
    else ch=ch;
    cout << ch <<endl;
    return 0;
}

20. MT1120 老师的评语

(1)题目描述
请编写一个简单程序,输入学生成绩等级ABCD,输出相应的评语“Excellent” 、 “Well done" 、 “You passed"、“Better luck next time"。非法输入时候则输出“Invalid grade"

输入格式: 输入字符型
.
输出格式: 输入字符评语

输入格式: A
.
输出格式: Excellent

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char ch;
    cin >> ch;
    if(ch=='A') cout<<"Excellent";
    else if(ch=='B') cout<<"Well done"; 
    else if(ch=='C') cout<<"You passed"; 
    else if(ch=='D') cout<<"Better luck next time"; 
    else cout<<"Invalid grade"; 
    return 0;
}

21. MT1121 小码哥考完咯

(1)题目描述
小码哥考完咯,你是她的老师,请使用switch语句编写一个程序,输出她的分数对应的成绩等级ABCDF。使用以下分级标准:A=90-100,B=80-89,C=70-79,D=60-69,F=O-59。不考虑负数或者其他特殊情况。本题要求使用switch语句。

输入格式: 输入为整型
.
输出格式: 输出为整型

输入格式: 99
.
输出格式: A

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    n/=10;
    switch(n){
        case 10: cout<<'A'<<endl; break;
        case 9: cout<<'A'<<endl; break;
        case 8: cout<<'B'<<endl; break;
        case 7: cout<<'C'<<endl; break;
        case 6: cout<<'D'<<endl; break;
        default: cout<<'F'<<endl;
    }
    return 0;
}

小结(二)

  1. 冒泡排序:MT1112
  2. 正整数(MT1116)的第二种解法:
    算法竞赛入门【码蹄集新手村600题】(MT1101-1150)_云曦算法_04
  3. 大小写转换:MT1119

22. MT1122 阶梯IF-ELSE

(1)题目描述

小码哥考完咯,你是她的老师,请编写一个程序,输出她的分数对应的成绩等级ABCDF。使用以下分级标准:A=90-100,B=80-89,C=70-79,D=60-69,F=0-59不考虑负数或者其他特殊情况。本题要求使用阶梯IF-ELSE语句,不得使用switch。

输入格式: 输入为整型
.
输出格式: 输出为整型

输入格式: 100
.
输出格式: A

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    n/=10;
    switch(n){
        case 10: cout<<'A'<<endl; break;
        case 9: cout<<'A'<<endl; break;
        case 8: cout<<'B'<<endl; break;
        case 7: cout<<'C'<<endl; break;
        case 6: cout<<'D'<<endl; break;
        default: cout<<'F'<<endl;
    }
    return 0;
}

23. MT1123 元音

(1)题目描述
请编写一个简单程序,检查输入字符是否为元音

输入格式: 输入字符型
.
输出格式: 输出Y或N

输入格式: A
.
输出格式: Y

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char ch;
    cin >> ch;
    vector<char> a{'A','a','O','o','E','e','I','i','U','u'};
    vector<char>::iterator iter = find(a.begin(),a.end(),ch);
    if(iter == a.end()) cout<<'N';
    else cout<<'Y';
    return 0;
}

24. MT1124 罗马数字

(1)题目描述
编一个程序,输入一个整数(1~9),输出对应大写罗马数字。不考虑非法的不合理的输入等特殊情况。

输入格式: 输入整型
.
输出格式: 输出字符串

输入格式: 4
.
输出格式: IV

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    string c[100] = {"0","I","II","III","IV","V","VI","VII","VIII","IX","X"};
    cout << c[n] << endl;
    return 0;
}

25. MT1125 几月份

(1)题目描述
编一个程序,输入该月的英文月名,小写,输出对应月份号。不考虑非法的不合理的输入等特殊情况。

输入格式: 输入字符串
输出格式: 输出整型

输入格式: april
.
输出格式: 4

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    string s;
    cin >> s;
    if(s=="january") cout<<1;
    else if(s=="february") cout<<2;
    else if(s=="march") cout<<3;
    else if(s=="april") cout<<4;
    else if(s=="may") cout<<5;
    else if(s=="june") cout<<6;
    else if(s=="july") cout<<7;
    else if(s=="august") cout<<8;
    else if(s=="september") cout<<9;
    else if(s=="october") cout<<10;
    else if(s=="november") cout<<11;
    else if(s=="december") cout<<12;
    return 0;
}

26. MT1126 十二生肖

(1)题目描述
编一个程序,输入一个整数(1~12),输出对应十二生肖,鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪的拼音(小写)。不考虑非法的不合理的输入等特殊情况。

输入格式: 输入整型
.
输出格式: 输出字符串

输入格式: 4
.
输出格式: tu

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    string c[100] = {"shu","niu","hu","tu","long","she","ma","yang","hou","ji","gou","zhu"};
    cout << c[n-1] << endl;
    return 0;
}

27. MT1127 小码哥的属相

(1)题目描述
输入小码哥的生日年份(1900~2050),计算输出小码哥的属相生肖(“rat”,“ox” , “tiger” , "rabbit”, “dragon”, “snake”, “horse” , "sheep”,“monkey”, “rooster” , “dog”, “pig”)。不考虑非法输入等特殊情况。

输入格式: 输入整型
.
输出格式: 输出字符串

输入格式: 1900
.
输出格式: rat

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    n=n-1900;
    n%=12;
    string c[100] = {"rat","ox","tiger","rabbit","dragon","snake","horse","sheep","monkey","rooster","dog","pig"};
    cout << c[n] << endl;
    return 0;
}

28. MT1128 骰子的反面

(1)题目描述
小码哥抛出一个六面骰子。每个面上都印有一个数字,数字在1到6之间。输入正面的数字,输出对面的数字。其他情况输出-1。

输入格式: 输入为整型
.
输出格式: 输出为整型

输入格式: 6
.
输出格式: 1

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x;
    cin >> x;
    switch(x){
        case 1: cout<<'6';break;
        case 6: cout<<'1';break;
        case 2: cout<<'5';break;
        case 5: cout<<'2';break;
        case 3: cout<<'4';break;
        case 4: cout<<'3';break;
        default: cout<<"-1";break;
    }
    return 0;
}

29. MT1129 小码哥玩骰子

(1)题目描述
小码哥抛出一个六面骰子。每个面上都印有一个数字,数字在1到6之间。输入正面的数字,请猜测对面的数字并输出两数之和。

输入格式: 输入为整型
.
输出格式: 输出为整型

输入格式: 5
.
输出格式: 7

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x;
    cin >> x;
    switch(x){
        case 1: cout<<'7';break;
        case 6: cout<<'7';break;
        case 2: cout<<'7';break;
        case 5: cout<<'7';break;
        case 3: cout<<'7';break;
        case 4: cout<<'7';break;
        default: cout<<"-1";break;
    }
    return 0;
}

30. MT1130 骰子里的数学

(1)题目描述
小码哥抛出一个六面骰子。每个面上都印有一个数字,数字在1到6之间。输入正面的数字,请猜测对面的数字并输出两数之差。

输入格式: 输入为整型
.
输出格式: 输出为整型

输入格式: 5
.
输出格式: 3

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x;
    cin >> x;
    switch(x){
        case 1: cout<<"-5";break;
        case 6: cout<<'5';break;
        case 2: cout<<"-3";break;
        case 5: cout<<'3';break;
        case 3: cout<<"-1";break;
        case 4: cout<<"1";break;
        default: cout<<"-1";break;
    }
    return 0;
}

31. MT1131 字符判断

(1)题目描述
输入一个字符,判断是数字字符、大写字母、小写字母、算术运算符、关系运算符、逻辑运算符,还是其他字符,分别输出“Number”, "Capital letter”,“Lowercase letter” , “Arithmetic operators”, “Relational operators”,"Logical operators”, “Other character”。

输入格式: 输入一个字符
.
输出格式: 输出字符

输入格式: A
.
输出格式: Capital letter

算术运算符:+ - * /
关系运算符:= > <
逻辑运算符: ! & | ^

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    char ch;
    int a;
    cin >> ch;
    a=(int)ch;
    if(a >=48 &&a <= 57) cout << "Number" <<endl;
    else if(ch >= 'A' && ch <='Z') cout << "Capital letter" <<endl;
    else if(ch >= 'a' && ch <='z') cout << "Lowercase letter" <<endl;
    else if(ch == '+' || ch =='-' || ch == '*' || ch =='/') cout << "Arithmetic operators" <<endl;
    else if(ch == '=' || ch =='>' || ch =='<') cout << "Relational operators" <<endl;
    else if(ch == '!' || ch =='&' || ch == '^' || ch =='|') cout << "Logical operators" <<endl;
    else cout << "Other character" <<endl;
    
    return 0;
}

32. MT1132 人民币大写数字

(1)题目描述
输入一个金额,输出对应的人民币大写数字(零壹贰参肆伍陆染挪玫拾)。不考虑负数等不合理的输入。

输入格式: 输入为整型(<100)
.
输出格式: 输出字符

输入格式: 35
.
输出格式: 叁拾伍元整

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m,t;
    string c[100] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
    cin >> n;
    if(n/10!=0) cout << c[n/10] << c[10];
    m = n/10,t=n%10;
    if(t!=0) cout << c[t];
    if(n==0) cout << c[0];
    cout << "元整"<<endl;
    return 0;
}

33. MT1133 小码哥打车

(1)题目描述
小码哥在缅因州打车,那里只有Yellow cab,5个迈(Mile)以内收费10美元,里程大于5个迈小于等于10个迈的部分每个迈收费2美元,里程大于10个迈的部分每个迈收费2.5美元。不考虑负数,O或者其他特殊情况。

输入格式: 输入为整型
.
输出格式: 输出为实型,保留2位小数

输入格式: 5
.
输出格式: 10.00

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    double res;
    cin >> n;
    if(n <= 5) res = 10.00;
    else if(n>5 && n<=10) res = 10.0+2*(n-5);
    else if(n>10) res = 20+2.5*(n-10);
    printf("%.2lf",res); 
    return 0;
}

34. MT1134 简单计算

(1)题目描述
编写一个模拟简单计算器的程序,计算表达式: a op b的值,要求a、op、b从盘输入。其中a、b (作除数时不能为O)为数值,op为运算符+、 -、*、/。本题不考虑非法输入等特殊情况。

输入格式: 输入数据和运算符
.
输出格式: 输出为实型

输入格式: 3+5
.
输出格式: 8.000000

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    double n,m,res;
    char ch;
    cin >> n >> ch >> m;
    switch(ch){
        case '+': res = n+m; break;
        case '-': res = n-m; break;
        case '*': res = n*m; break;
        case '/': res = n/m; break;
    }
    printf("%.6lf",res);
    return 0;
}

35. MT1135 时间转换

(1)题目描述
编写一个程序,输入24小时制的时间,然后以12小时的形式显示时间。不考虑负数或者其他特殊情况。注意不要把中午12:00显示为00:00,应该是12:0OPM。凌晨00:00则是12:00AM。

输入格式: 输入为整型,冒号分隔
.
输出格式: 输出为整型,冒号分隔,以两位数的形式显示时间并加上后缀AM或者PM。

输入格式: 8:7
.
输出格式: 08:07AM

(2)参考代码

import java.util.Scanner;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

class Main {

   public static void main(String[] args) {

      Scanner s = new Scanner(System.in);
      // code here
      String t = s.nextLine();
      SimpleDateFormat f = new SimpleDateFormat("HH:mm");
      Date d = null;
      try{
         d=f.parse(t);
      } catch(ParseException e){
         e.printStackTrace();
      }
      boolean pm = false;
      if(d.getHours() == 0){
         d.setHours(d.getHours()+12);
      }else if(d.getHours()==12){
         pm = true;
      }else if(d.getHours()>12){
         d.setHours(d.getHours()-12);
         pm = true;
      }
      System.out.printf("%02d:%02d",d.getHours(),d.getMinutes());
      if(pm==true){
         System.out.println("PM");
      }else{
         System.out.println("AM");
      }
      s.close();
   }
}

36. MT1136 时间也能加

(1)题目描述
分两行输入两组时分秒,空格分隔,编写一个函数,把对应的时和时相加,分和分相加,秒和秒相加,输出结果。结果也是时分秒,要满足时间规律,比如秒的范围是0~59。不考虑不合理的输入等特殊情况。

输入格式: 分两行输入两组时分秒,空格分隔,整型。
.
输出格式: 输出整型,空格分隔。

输入格式:
1 2 3
4 5 6
.
输出格式: 5 7 9

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a,b,c;
    cin >> a >> b >> c;
    int ans = a*60*60+b*60+c;
    cin >> a >> b >> c;
    ans += a*60*60+b*60+c;
    cout << ans/60/60 << " "<< ans/60%60 << " "<< ans%60;
    return 0;
}

37. MT1137 闰年

(1)题目描述
请编写一个简单程序,判断输入的年份是不是闰年。输入公元后的年份。

输入格式: 输入整型
.
输出格式: 输出Y或者N

输入格式: 2021
.
输出格式: N

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int y;
    cin >> y;
    if((y%4==0) && (y%100!=0) || (y%400==0)) cout<<"Y";
    else cout<<"N";
    return 0;
}

38. MT1138 第几天

(1)题目描述
输入日期(YYYY-M-D),然后输出它是一年中的第几天。不考虑负数或者其他特殊情况。

输入格式: 输入为整型
.
输出格式: 输出为整型

输入格式: 2013-6-17
.
输出格式: 168

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int dp[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int m,y,d,ans;
    scanf("%d-%d-%d",&y,&m,&d);
    if((y%100 != 0 && y%4==0) || y%400 ==0) dp[2]++;
    for(int i=1;i<m;i++) ans += dp[i];
    ans += d;
    printf("%d",ans);
    return 0;
}

39. MT1139 11或13

(1)题目描述
输入正整数N,判断它是否可被11或13整除,输出YES或者NO。

输入格式: 输入正整数N
.
输出格式: 输出YES或者NO

输入格式: 13
.
输出格式: YES

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int N;
    cin >> N;
    if(N%11==0 || N%13==0) cout << "YES";
    else cout << "NO";
    return 0;
}

40. MT1140 数字7

(1)题目描述
输入一个整数N,判断它是不是整数7的和、差之类的。(比如某数等于7+7,或者7-7,或者7-7-7+7+7…)是则输出YES否则或者NO。

输入格式: 输入为整型
.
输出格式: 输出为YES或者NO

输入格式: 14
.
输出格式: YES

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    if(n%7==0) cout << "YES";
    else cout << "NO";
    return 0;
}

小结(三)

典型范例:

  1. 比较新颖的方法:
    容器方法:MT1123
    String方法:MT1124

  2. 运算符:MT1134

  3. 时间算法:MT1136

  4. 闰年:MT1138

  5. 分位数:MT1143

  6. 整除:MT1145


41. MT1141 数字13

(1)题目描述
给您一个整数输入N,如果它是整数13的和或差(13+13,13-13,13-13-13+13+13…),输出YES,否则输出NO。

输入格式: 输入为整型
.
输出格式: 输出为YES或者NO

输入格式: 14
.
输出格式: NO

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    if(n%13==0) cout << "YES";
    else cout << "NO";
    return 0;
}

42. MT1142 整除的总数

(1)题目描述
输入正整数N和M,其中N<=M。求区间[N,M]中可被K整除的总数。

输入格式: 输入正整数N,M和K,空格分隔。
.
输出格式: 输出整型

输入格式: 6 15 3
.
输出格式: 4

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m,k,num;
    cin >> n >> m >> k;
    for(int i=n; i<=m; i++){
        if(i%k==0) ++num;
    }
    cout << num;
    return 0;
}

43. MT1143 哈沙德数

(1)题目描述
如果一个数字可被其数字之和整除,则称该数字为Harshad哈沙德数,输入一个正整数,判断他是不是哈沙德数,输出YES或者NO。

输入格式: 输入整型
.
输出格式: 输出YES或者NO

输入格式: 156
.
输出格式: YES

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,sum=0;
    cin >> n;
    for(int i=n;i>0;i/=10) sum+=i%10;
    if(n%sum==0) cout<<"YES";
    else cout<<"NO";
    return 0;
}

44. MT1144 整除

(1)题目描述
输入正整数N,检查它是否可以被其数字之和整除,输出YES或者NO。不考虑不合理的输入等特殊情况。

输入格式: 输入正整数N
.
输出格式: 输出YES或者NO

输入格式: 18
.
输出格式: YES

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,sum=0;
    cin >> n;
    for(int i=n;i>0;i/=10) sum+=i%10;
    if(n%sum==0) cout<<"YES";
    else cout<<"NO";
    return 0;
}

45. MT1145 全部整除

(1)题目描述
输入正整数N,找到一个最小的整数K,可以被1到N的每个数整除。

输入格式: 输入整型
.
输出格式: 输出整型

输入格式:6
.
输出格式: 60

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,i,j,sum;
    cin >> n;
    for(i=1;;i++){
        sum=0;
        for(j=1;j<=n;j++){
            if(i%j==0) sum++;
        }
        if(sum==n) break;
    }
    cout << i;
    return 0;
}

46. MT1146 孙子歌诀

(1)题目描述
存在一个数x,除以3余2,除以5余3,除以7余2,然后求这个数。明朝数学家程大位将解法编成易于上口的《孙子歌诀》︰

三人同行七十稀,
五树梅花廿一支,
七子团圆正半月,
除百零五使得知。

3人同行“70”稀,3的余数乘以70,5树梅花“21”支,5的余数乘以21,7子团圆正半月(15天),7的余数乘以15。最后加在一起除以105看余数。

输入格式: 无
.
输出格式: 输出整型

输入格式:无
.
输出格式:23

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x=1;
    while(x++){
        if(x%3==2&&x%5==3&&x%7==2){
            cout<<x;
            break;
        }
    }
    return 0;
}

47. MT1147 古人的剩余定理

(1)题目描述
今有物不知其数,
三三数之剩二,
五五数之剩三,
七七数之剩二。
问物最少几何?

输入格式: 无
.
输出格式: 输出整型

输入格式:无
.
输出格式:23

同一道题换了个说法罢了

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x=1;
    while(x++){
        if(x%3==2&&x%5==3&&x%7==2){
            cout<<x;
            break;
        }
    }
    return 0;
}

48. MT1148 隐晦余8

(1)题目描述
存在一个数x(大于10),除以3余2,除以5余3,除以7余1,求这个数最小值。

输入格式: 无
.
输出格式: 输出整型

输入格式:无
.
输出格式:113

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x=11;
    while(x++){
        if(x%3==2&&x%5==3&&x%7==1){
            cout<<x;
            break;
        }
    }
    return 0;
}

49. MT1149 余数

(1)题目描述
存在一个数x(大于10),除以7余2,除以11余4,除以13余5,求这个数最小值。

输入格式:无
.
输出格式: 输出整型

输入格式:无
.
输出格式:499

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x=11;
    while(x++){
        if(x%7==2&&x%11==4&&x%13==5){
            cout<<x;
            break;
        }
    }
    return 0;
}

50. MT1150 战死四五百

(1)题目描述
带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。问战死多少人。

输入格式:无
.
输出格式: 输出整型

输入格式:无
.
输出格式:451

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int i=1;
    for(int i=1500;i>=0;i--){
        if(i%3==2&&i%5==4&&i%7==6&&i<=1100){
            cout<<1500-i;
            break;
        }
    }
    return 0;
}

小结(四)

  1. 整除范例:MT1145

希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?

愿你的结局,配得上你一路的颠沛流离。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK