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

Posted 灵彧universe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法竞赛入门码蹄集新手村600题(MT1101-1150)相关的知识,希望对你有一定的参考价值。

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


@TOC


前言



目录

1. MT1101 带参数的宏II

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

格式

样例1

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

格式

样例1

(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)题目描述
将球体积计算公式定义为宏。在主函数中输入半径求体积。

格式

样例1

(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)题目描述

格式

样例1

(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公里。

格式

样例1

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

格式

样例1

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

格式

样例1

(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)位小数(四舍五入)的算法定义为宏。在主函数中输入数据输出计算结果。

格式

样例1

(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比较,输出比较结果

格式

样例1

(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两个整数,输出他们之间的最小值

格式

样例1

(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两个整数,输出他们之间的最大值

格式

样例1

(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

(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

(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)

格式

样例1

(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,负数或者其他特殊情况。

格式

样例1

(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是否为两位数的正整数

格式

样例1

(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中是否有两个负数。

格式

样例1

(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是否为一个等差数列中的连续三项。

格式

样例1

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

格式

样例1

(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"

格式

样例1

(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语句。

格式

样例1

(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)的第二种解法:
  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。

格式

样例1

(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)题目描述
请编写一个简单程序,检查输入字符是否为元音

格式

样例1

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )

    char ch;
    cin >> ch;
    vector<char> aA,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),输出对应大写罗马数字。不考虑非法的不合理的输入等特殊情况。

格式

样例1

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

格式

样例1

(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),输出对应十二生肖,鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪的拼音(小写)。不考虑非法的不合理的输入等特殊情况。

格式

样例1

(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")。不考虑非法输入等特殊情况。

格式

样例1

(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。

格式

样例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之间。输入正面的数字,请猜测对面的数字并输出两数之和。

格式

样例1

(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之间。输入正面的数字,请猜测对面的数字并输出两数之差。

格式

样例1

(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"。

格式

样例1

备注

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

格式

样例1

(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或者其他特殊情况。

格式

样例1

(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为运算符+、 -、*、/。本题不考虑非法输入等特殊情况。

格式

样例1

(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。

格式

样例1

(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)参考代码

#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)题目描述
请编写一个简单程序,判断输入的年份是不是闰年。输入公元后的年份。

格式

样例1

(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),然后输出它是一年中的第几天。不考虑负数或者其他特殊情况。

格式

样例1

(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。

格式

样例1

(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。

格式

样例1

(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。

格式

样例1

(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整除的总数。

格式

样例1

(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。

格式

样例1

(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。不考虑不合理的输入等特殊情况。

格式

样例1

(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的每个数整除。

格式

样例1

(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看余数。

格式

样例1

(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)题目描述
今有物不知其数,
三三数之剩二,
五五数之剩三,
七七数之剩二。
问物最少几何?

格式

样例1

解析:

(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,求这个数最小值。

格式

样例1

(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,求这个数最小值。

格式

样例1

(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人。问战死多少人。

格式

样例1

(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

结语

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

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

以上是关于算法竞赛入门码蹄集新手村600题(MT1101-1150)的主要内容,如果未能解决你的问题,请参考以下文章

算法竞赛入门码蹄集新手村600题(MT1401-1450)

算法竞赛入门码蹄集新手村600题(MT1201-1250)

算法竞赛入门码蹄集新手村600题(MT1551-1600)

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

算法竞赛入门码蹄集新手村600题(MT1301-1350)

算法竞赛入门码蹄集进阶塔335题(MT2286-2290)