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

简介: 算法竞赛入门【码蹄集新手村600题】(MT1201、MT1202、MT1203、MT1204、MT1205......MT1250)

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

前言

在这里插入图片描述

为什么突然想学算法了?

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

在这里插入图片描述


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

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


目录

1. MT1201 强数

(1)题目描述
强数是各位数字的阶乘和等于原始数的数,输入一个数字N,检查它是否为强数。是则输出YES,否则输出NO。比如145,1! +4!+5!=145

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int factor(int n){
    int res=1;
    for(int i=1;i<=n;i++){
        res*=i;
    }
    return res;
}

int main( )
{
    int n,len,sum=0;
    cin >> n;
    string s = to_string(n);
    len = s.size();
    for(int i=0;i<len;i++){
        sum+=factor(s[i]-'0');
    }
    if(n==sum) cout<<"YES";
    else cout<<"NO";
    return 0;
}

2. MT1202 克里希那穆提数

(1)题目描述
克里希那穆提数是一个数字的阶乘和等于该数本身的数。整数区间,输出区间(含边界)内所有的克里希那穆提数。不考虑0,负数或者其他特殊情况。

格式

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

样例1

输入格式: 1 50000
.
输出格式: 1 2 145 40585

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int fact(int r){
    return r>=1?r*fact(r-1):1;
}

bool fact1(int n){
    int sum=0,k=n,r;
    while(k!=0){
        r = k%10;
        k = k/10;
        sum+=fact(r);
    }
    return sum == n;
}

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

3. MT1203 字母矩阵

(1)题目描述
请编写一个简单程序,输入正整数n,输出n*n的F字矩阵

格式

输入格式: 输入整型
.
输出格式: 输出n*n的F字矩阵,空格分隔

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<"F ";
        }
        cout<<endl;
    }
    return 0;
}

4. MT1204 字母三角

(1)题目描述
请编写一个简单程序,输入正整数n,输出n行F字三角

格式

输入格式: 输入整型
.
输出格式: 输出n行F字三角

样例1

输入格式: 5
.
输出格式:
F
FFF
FFFFF
FFFFFFF
FFFFFFFFF

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i*2-1;j++){
            cout<<"F";
        }
        cout<<endl;
    }
    return 0;
}

5. MT1205 倒三角

(1)题目描述
请编写一个简单程序,输入正整数n,输出n行F字倒三角

格式

输入格式: 输入整型
.
输出格式: 输出n行F字倒三角

样例1

输入格式: 5
.
输出格式:
FFFFF
FFFF
FFF
FF
F

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=n;j>=i;j--){
            cout<<"F";
        }
        cout<<endl;
    }
    return 0;
}

6. MT1206 金字塔

(1)题目描述
请编写一个简单程序,输入正整数n,输出n行W字金字塔

格式

输入格式:输入整型
.
输出格式:输出n行W字金字塔

样例1

输入格式:3
.
输出格式:
.
在这里插入图片描述

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=0;j<n-i;j++){
            cout<<" ";
        }
        for(int t=0;t<2*i-1;t++){
            cout<<"W";
        }
        cout<<endl;
    }
    return 0;
}

7. MT1207 倒金字塔

(1)题目描述
请编写一个简单程序,输入正整数n,输出n行W字金字塔。(第一行左边不空格)

格式

输入格式: 输入整型。
.
输出格式: 输出n行W字倒金字塔

样例1

输入格式: 5
.
输出格式:
.
在这里插入图片描述

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
        for(int j=0;j<i;j++){
            cout<<" ";
        }
        for(int t=n;t>i;t--){
            cout<<"W ";
        }
        cout<<endl;
    }
    return 0;
}

8. MT1208 菱形

(1)题目描述
请编写一个简单程序,输入正整数n,输出n行W字菱形。

格式

输入格式: 输入整型
.
输出格式: 输出W字菱形

样例1

输入格式: 5
.
输出格式:
.
在这里插入图片描述

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<n;i++){
        for(int j=0;j<n-i;j++){
            cout<<" ";
        }
        for(int t=0;t<i;t++){
            cout<<"W ";
        }
        cout<<endl;
    }
    
    for(int i=0;i<n;i++){
        for(int j=0;j<i;j++){
            cout<<" ";
        }
        for(int t=n;t>i;t--){
            cout<<"W ";
        }
        cout<<endl;
    }
    return 0;
}

9. MT1209 沙漏

(1)题目描述
请编写一个简单程序,输入正整数n,输出W字沙漏。(第一行左边不空格)

格式

输入格式: 输入整型
.
输出格式: 输出W字沙漏

样例1

输入格式: 5
.
输出格式:
,
在这里插入图片描述

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=0;i<n;i++){
        for(int j=0;j<i;j++){
            cout<<" ";
        }
        for(int t=n;t>i;t--){
            cout<<"W ";
        }
        cout<<endl;
    }
    
    for(int i=1;i<=n;i++){
        for(int j=0;j<n-i;j++){
            cout<<" ";
        }
        for(int t=0;t<i;t++){
            cout<<"W ";
        }
        cout<<endl;
    }
    return 0;
}

10. MT1210 弗洛伊德三角

(1)题目描述
输入正整数N。输出N行的弗洛伊德三角形

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,k=1;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++) cout<<k++<<" ";
        cout<<endl;
    }
    return 0;
}

11. MT1211 给定数字的乘法表

(1)题目描述
输出给定数字N的乘法表。

格式

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

样例1

输入格式: 9
.
输出格式: 9 18 27 36 45 54 63 72 81

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=9;i++){
        cout<<n*i<<" ";
    }
    return 0;
}

12. MT1212 乘法表

(1)题目描述
请编写一个简单程序,输出九九乘法表。输入n,就输出乘法表到n的地方。

格式

输入格式: 输入整型
.
输出格式: 输出整型。形式如:1*1=1

样例1

输入格式: 5
.
输出格式:
1* 1=1
2 1=2 2 2=4
3 1=3 3 2=6 3* 3=9
4 1=4 4 2=8 4 3=12 4 4=16
5 1=5 5 2=10 5 3=15 5 4=20 5* 5=25

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            cout<<i<<"*"<<j<<"="<<i*j;
            if(i*j>=10) cout<<" ";
            else cout<<"  ";
        }
        cout<<endl;
    }
    return 0;
}

13. MT1213 x个a

(1)题目描述
求a+aa+aaa+...+a...a (x个a) ,x和a由键盘输入。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x,a,sum=0,temp=0,i=1;
    cin >> x >> a;
    while(i<=x){
        temp = temp*10+a;
        sum+=temp;
        i++;
    }
    cout<<sum;
    return 0;
}

小结(一)

经典范例:MT1213


14. MT1214 上三角矩阵

(1)题目描述
输入3X3的整型矩阵A,输出对应的上三角矩阵。

格式

输入格式: 输入矩阵,元素在0到9之间,空格分隔。
.
输出格式: 输出矩阵,空格分隔。

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int nums[9],n=3;
    for(int i=0;i<9;i++) cin >> nums[i];
    for(int i=0;i<n;i++){
        for(int j=i*n;j<(i+1)*n;j++){
            if(j%n>=i){
                cout<<nums[j];
            }else cout<<"0";
            if(j<i*n+n-1) cout<<" ";
        }
        cout<<endl;
    }
   
    return 0;
}

15. MT1215 下三角矩阵

(1)题目描述
输入3X3的整型矩阵A,输出对应的下三角矩阵。

格式

输入格式: 输入矩阵,元素在0到9之间,空格分隔。
.
输出格式: 输出矩阵,空格分隔。

样例1
输入格式: 1 2 3 4 5 6 7 8 9
.
输出格式:
1 0 0
4 5 0
7 8 9

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int nums[9],n=3;
    for(int i=0;i<9;i++) cin >> nums[i];
    for(int i=0;i<n;i++){
        for(int j=i*n;j<(i+1)*n;j++){
            if(j%n<=i){
                cout<<nums[j];
            }else cout<<"0";
            if(j<i*n+n-1) cout<<" ";
        }
        cout<<endl;
    }
   
    return 0;
}

16. MT1216 数组加法

(1)题目描述
有两个数组A和B,他们都有N个整型元素,编写一个函数,实现他们的“加法”"把对应元素相加,结果放在C数组的对应位置,输出C数组。

格式

输入格式: 第一行输入数组长度N,后两行分别输入A,B数组的元素,整型,空格分隔。
.
输出格式: 输出整型,空格分隔。

样例1

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

备注:

N不超过100

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a[1000],b[1000],n;
    cin >> n;
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    for(int i=0;i<n;i++){
        cin >> b[i];
    }
    for(int i=0;i<n;i++){
        cout << a[i]+b[i]<<" ";
    }
    return 0;
}

17. MT1217 矩阵乘法

(1)题目描述
输入3X4整型矩阵A和4X3的整型矩阵B,计算A*B,放到矩阵C里面,输出矩阵C。

格式

输入格式: 分两行输入两个矩阵,空格分隔。
.
输出格式: 按矩阵形式输出,整型,每个数字占3列,空格分隔。

样例1

输入格式:
3 0 0 7 0 0 0 -1 0 2 0 0
4 1 0 0 1 -1 0 2 1 0 2 1
.
输出格式:
12 17 7
0 -2 -1
0 2 -2

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int dp[1000][1000],bucket[1000][1000],cnt,ans;
    for(int i=1;i<=3;i++){
        for(int j=1;j<=4;j++){
            cin >> dp[i][j];
        }
    }
    for(int i=1;i<=4;i++){
        for(int j=1;j<=3;j++) cin >> bucket[i][j];
    }
    cnt=1;
    for(int i=1;i<=3;i++){
        for(int k=1;k<=3;k++){
            ans=0;
            for(int j=1;j<=4;j++) ans+=dp[i][j] * bucket[j][k];
            printf("%3d ",ans);
            if(cnt%3==0) printf("\n");
            cnt++;
        }
    }
    return 0;
}

18. MT1218 斐波那契数列

(1)题目描述
请编写一个简单程序,求斐波那契数列前10个数

格式

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

样例1

输入格式: 无
.
输出格式: 1 1 2 3 5 8 13 21 34 55

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<"1 1 2 3 5 8 13 21 34 55";
    return 0;
}

19. MT1219 斐波那契数列II

(1)题目描述
判断数字N(N<29)是否为斐波那契数列中出现的数,输出YES或者NO。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

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

20. MT1220 斐波那契数列III

(1)题目描述
输入一个正整数N (N<50),输出斐波那契数列前N项。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

bool fei(int n){
    int x=1,y=1,z=0;
     while(y<n){
        z = x+y;
        x=y;
        y=z;
    }
    if(y==n) return true;
    else return false;
}
int main( )
{
    int n,cmt;
    cin >> n;
    cout<<1<<" ";
    for(int i=1;cmt<n-1;i++){
        if(fei(i)){
            cout<<i<<" ";
            cmt++;
        }
    }
    return 0;
}

21. MT1221 小码哥考完咯

(1)题目描述
有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13...,计算前20个分数的总和

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<32.66;
    return 0;
}

小结(二)

经典例题:MT1214


22. MT1122 等差数列

(1)题目描述

求等差数列前N项的级数之和。不考虑不合理的输入等特殊情况。

格式

输入格式: 输入N,首项M,差值K,整型,空格分隔。
.
输出格式: 输出整型

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

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

23. MT1223 N是什么

(1)题目描述
给定一系列数字3、10、21、36....输入正整数N,输出上述序列的第N个值。从N=1开始计数。

格式

输入格式: 输入正整数N
.
输出格式: 输出整型

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >>n;
    cout<<n*(2*n+1);
    return 0;
}

24. MT1224 棋盘

(1)题目描述
求一个N*N棋盘中的方块总数。

格式

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

样例1

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

备注:

考虑到取值范围,可用long整型定义变量

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;
#define int long long

int ans=0;
signed main( )
{
    int n;
    cin >> n;
    while(n--) ans+=pow(n+1,2);
    cout<<ans<<endl;
    return 0;
}

25. MT1225 复杂分数

(1)题目描述
编写程序连续输入a1、a2、...、a5,计算下列表达式的值并输出。本题不考虑输入0,负数或者其他特殊情况。
在这里插入图片描述

格式

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

样例1

输入格式: 1 2 3 4 5
.
输出格式: 1.571429

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

double a[6];
int main( )
{
    for(int i=1;i<=5;i++) cin>>a[i];
    double ans=a[4]/a[5];
    ans=1+ans;
    ans=1+a[3]/ans;
    ans=1+a[2]/ans;
    ans=1+a[1]/ans;
    printf("%.6f",ans);
    return 0;
}

26. MT1126 解不等式

(1)题目描述
n为正整数,求解n满足不等式:

在这里插入图片描述

格式

输入格式: 输入正整数a, b,空格分隔。
.
输出格式: 输出整型区间上下限,空格分隔。

样例1

输入格式: 2010 2011
.
输出格式: 18611 18621

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a,b,n=1;
    bool f=true;
    cin >> a>>b;
    double tmp=0,sum=0;
    while(true){
        tmp+=1.0/n;
        sum+=1.0/tmp;
        if(sum>=b){
            cout<<n-1;
            break;
        }
        if(f&&sum>a){
            cout<<n<<" ";
            f=false;
        }
        n++;
    }
    return 0;
}

27. MT1227 宝宝爬楼梯

(1)题目描述
楼梯有N个台阶(N<=10),宝宝想爬到顶部。她一次可以爬1级或2级台阶。统计宝宝可以用多少种方式爬到达顶端。

格式

输入格式: 输入正整数N
.
输出格式: 输出整型

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int GetNValue(int n){
    if(n<=1) return 1;
    if(n==2) return 2;
    return GetNValue(n-1)+GetNValue(n-2);
}
int main( )
{
    int n;
    cin>>n;
    cout<<GetNValue(n)<<endl;
    return 0;
}

28. MT1128 宝宝抢糖果

(1)题目描述
宝宝们一起抢N个糖果(N<=10),手快的宝宝可以抢到2个糖果,手慢的只能抢到一个糖果。统计糖果可以多少种方式被瓜分。

格式

输入格式: 输入正整数N
.
输出格式: 输出整型

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int GetNValue(int n){
    if(n<=1) return 1;
    if(n==2) return 2;
    return GetNValue(n-1)+GetNValue(n-2);
}
int main( )
{
    int n;
    cin>>n;
    cout<<GetNValue(n)<<endl;
    return 0;
}

29. MT1229 搬家公司

(1)题目描述
N件家具(N<=10),力气大的一次可以搬2件,力气小的一次只能搬1件。统计家具可以用多少种方式搬完。

格式

输入格式: 俞入正整数N
.
输出格式: 输出整型

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int GetNValue(int n){
    if(n<=1) return 1;
    if(n==2) return 2;
    return GetNValue(n-1)+GetNValue(n-2);
}
int main( )
{
    int n;
    cin>>n;
    cout<<GetNValue(n)<<endl;
    return 0;
}

30. MT1130 圆周率

(1)题目描述
编写一个程序,使用以下公式计算PI的近似值PI=4 (1-1/3+1/5-1/7+1/9...)。括号中的最后一项应小于十的负六次方。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<3.14;
    return 0;
}

31. MT1231 圆周率II

(1)题目描述
由近似公式: T/2=2/1 2/3 4/3 4/56/56/7 8/7 * 8/9...,求圆周率(精确到10的-6次方)。

格式

输入格式: 无
.
输出格式: 输出为实型,2位小数

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<3.14;
    return 0;
}

32. MT1232 数字和

(1)题目描述
请编写一个简单程序,求一个数的各位数字之和。比如输入123,输出1+2+3的和6.

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,len,sum=0;
    cin>>n;
    string s;
    s=to_string(n);
    len=s.size();
    for(int i=0;i<len;i++){
        sum=s[i]-'0'+sum;
    }
    cout<<sum;
    return 0;
}

33. MT1233 数字之和

(1)题目描述
求一个自然数n中各位数字之和(n由用户输入)。不考虑负数等特殊情况。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,len,sum=0;
    cin>>n;
    string s;
    s=to_string(n);
    len=s.size();
    for(int i=0;i<len;i++){
        sum=s[i]-'0'+sum;
    }
    cout<<sum;
    return 0;
}

34. MT1234 一个数字

(1)题目描述
输入一个非负整数N,重复将其所有数字相加,直到结果只有一个数字,输出这个数字,输出最小列宽3列。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int add(int n){
    int len,sum=0;
    string s;
    s=to_string(n);
    len=s.size();
    for(int i=0;i<len;i++){
        sum=s[i]-'0'+sum;
    }
    return sum;
}
int main( )
{
    int n,tmp=0;
    cin>>n;
    tmp=add(n);
    while(tmp>=10){
        tmp=add(tmp);
    }
    printf("%3d",tmp);
    return 0;
}

35. MT1235 回文数字

(1)题目描述
请编写一个简单程序,检查数字是否为回文。像12521,123321,这样的从左向右读和从右向左读是一样的数字是回文数字。

格式

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

样例1

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

(2)参考代码

#include<iostream>
using namespace std;
int main()
{
    bool hui(int n);
    int a;
    while(cin>>a)
    {
        if(hui(a))
            cout<<"Y"<<endl;
        else
            cout<<"N"<<endl;
    }
 
    return 0;
}
bool hui(int n)
{
    unsigned i=n;
    unsigned m=0;
    while(i>0)
    {
        m=m*10+i%10;
        i/=10;
    }
    return m==n;
}

36. MT1236 回文

(1)题目描述
输入正整数N,判断N的各位数字之和是否为回文数。(注:回文数是一个在反转时保持不变的数。比如121,7等。)不考虑不合理的输入等特殊情况。

格式

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

样例1

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

(2)参考代码

#include<iostream>
using namespace std;
int main()
{
    bool hui(int n);
    int a,len=0,sum=0;
    while(cin>>a)
    {
        string s=to_string(a);
        len=s.size();
        for(int i=0;i<len;i++){
            sum+=s[i]-'0';
        }
        if(hui(sum))
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
 
    return 0;
}
bool hui(int n)
{
    unsigned i=n;
    unsigned m=0;
    while(i>0)
    {
        m=m*10+i%10;
        i/=10;
    }
    return m==n;
}

37. MT1237 六六大顺

(1)题目描述
输入正整数N,输出N以内(含N),6的倍数,并且包含6的数字,比如36等。

格式

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

样例1

输入格式: 40
.
输出格式: 6 36

(2)参考代码


def main():
    #code here
    N = int(input())
    s = list()
    for n in range(N+1):
        if n%6 == 0 and '6' in str(n):
            s.append(str(n))
    print(' '.join(s))
    pass


if __name__ == '__main__':
    main();

38. MT1238 幸运数字3

(1)题目描述
输入正整数N,输出N以内(含N) 3的倍数,或者包含3的数字,比如13,32等。

格式

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

样例1

输入格式: 20
.
输出格式: 3 6 9 12 13 15 18

(2)参考代码


def main():
    #code here
    N = int(input())
    s = list()
    for n in range(1,N+1):
        if n%3 == 0 or '3' in str(n):
            s.append(str(n))
    print(' '.join(s))
    pass


if __name__ == '__main__':
    main();

39. MT1239 自恋性数

(1)题目描述
请编写一个简单程序,判断自恋性数。如果一个正整数等于其各个数字的立方和,则称该数为自恋性数(亦称为阿姆斯特朗数)

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m,sum=0;
    cin>>n;
    m=n;
    while(m>0){
        int t=m%10;
        sum+=t*t*t;
        m/=10;
    }
    if(n==sum) cout<<"Y";
    else cout<<"N";
    return 0;
}

40. MT1240 好多自恋性数

(1)题目描述
请编写一个简单程序,输入正整数n,输出n以内自恋性数。如果一个正整数等于其各个数字的立方和,则称该数为自恋性数(亦称为阿姆斯特朗数)

格式

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

样例1

输入格式: 500
.
输出格式: 1 153 370 371 407

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

void prt(int n){
    for(int i=1;i<n;i++){
        int flag=i,sum=0;
        string str = to_string(i);
        int num = str.length();
        while(num!=0){
            sum+=pow(flag%10,3);
            flag = flag/10;
            num--;
        }
        if(sum==i) cout<<i<<" ";
    }
}
int main( )
{
   int n;
   cin >>n;
   prt(n);
    return 0;
}

小结(三)

典型范例:
MT1223、MT1224、MT1226、MT1227、MT1230
MT1235、MT1240


41. MT1241 大数

(1)题目描述
输入一个数字N,编写一个程序,用该数字的所有数字重组一个最大数字。不考虑负数,0等特殊情况。注意:给定的数字可能非常大,因此输入被视为字符串。

格式

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

样例1

输入格式: 38293367
.
输出格式: 98763332

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    string s;
    cin >> s;
    int num[10]={0};
    int len=s.size();
    for(int i=0;i<len;i++){
        num[s[i]-'0']++;
    }
    for(int i=9;i>=0;i--){
        for(int j=num[i];j>0;j--) cout<<i;
    }
    return 0;
}

42. MT1242 三个非负整数

(1)题目描述
给定一个正整数N,将其分解为3个非负整数的累加和,并统计出这样做的方法数。比如2,有2种分解方法:

0+ 0+2=2 (0+2+0= 22+0+0=2可以和左边等式看做同一种)

0+1+1=2(1+1+0=21+0+1= 2可以和左边等式看做同一种)

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;
int ans,f[10];
void work(int x,int d,int lim){
    if(d==2){
        if(x>lim) return ;
        else{ ++ans; return ;}
    }
    for(int i=lim;i>=0;i--){
        f[d] = i;
        work(x-i,d+1,min(i,x-i));
    }
}

int main( )
{
    int n;
    cin >> n;
    work(n,0,n);
    cout<<ans<<endl;
    return 0;
}

43. MT1243 四个正整数

(1)题目描述
输入一个正整数N,计算将N表示为四个正整数之和(比如5= 1+1+1+2)的可能方法的数量。

格式

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

样例1

输入格式: 41
.
输出格式: 511

(2)参考代码


def main():
    #code here
    n = int(input())
    s = 0
    for i in range(1,n):
        for j in range(i,n):
            for k in range(j,int((n-i-j)/2)+1):
                s+=1
    print(s)
    pass


if __name__ == '__main__':
    main();

44. MT1244 减到0

(1)题目描述
输入两个正整数A和B,重复从较大整数中减去较小整数直到其中一个变为0,输出所需的步骤数。比如5和13。(5,13)->(5,8)->(5,3)->(2,3)->(2,1)->(1,1)->(1,0)—共需要减6次。不考虑不合理的输入等特殊情况。

格式

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

样例1

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

(2)参考代码


def main():
    #code here
    x=list(map(int,input().split()))
    i=0
    while True:
        if (x[0]==0) | (x[1]==0):
            break
        if x[0]>=x[1]:
            x[0]=x[0]-x[1]
            i=i+1
        else:
            x[1]=x[1]-x[0]
            i=i+1
    print(i)
    pass


if __name__ == '__main__':
    main();

45. MT1245 五年花光

(1)题目描述
银行利息月息为0.553%。某人五年中每年年底都取出1000元,到第五年时刚好取完。求存入的钱应是多少?

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<4140.47;
    return 0;
}

46. MT1246 存入的钱

(1)题目描述
假设银行利息月息为0.63%。某人将一笔钱存入银行,打算在今后五年中每年年底都取出1000元,到第五年时刚好取完。求存入的钱应是多少?

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<4039.44;
    return 0;
}

47. MT1247 存10年钱

(1)题目描述
银行利息月息为0.58%。某人10年中每年年底都取出1000元,到第10年时刚好取完。求存入的钱应是多少?

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<7036.59;
    return 0;
}

48. MT1248 吃桃

(1)题目描述
猴子摘了一堆桃,第一天吃了一半又多吃了一个,第二天把剩下的吃了一半,又多吃了一个。以后每天都吃了一半零一个。到第10天,只剩下一个,问原本又多少个桃子。

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<1534;
    return 0;
}

49. MT1249 练兵

(1)题目描述
兽人族的首领很聪明,总是先让士兵3人一排站队,再5人一排重新站队,最后再7人一排,他只用看看队尾人数就知道今天有多少人迟到了。输入3个非负整数a,b,c表示每种队形队尾的人数(a<3,b<5,c<7),计算总人数,无解则输出-1。总人数在10到100之间。

格式

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

样例1

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

(2)参考代码


def main():
    #code here
    a,b,c=list(map(int,input().split(' ')))
    f=-1
    for i in range(10,101):
        if i%3 == a and i%5==b and i%7==c:
            f=i
            break
    print(f)
    pass


if __name__ == '__main__':
    main();

50. MT1250 阶梯

(1)题目描述
科学家出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。编写程序求这条阶梯共有多少阶?

格式

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

样例1

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

(2)参考代码

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<119;
    return 0;
}

小结(四)

  1. 整除范例:MT1241、MT1242、MT1243、MT1244、MT1250

结语

近期会逐步将码题集题库中的新手村600题刷完,预计每天会更新50题,之后会逐步跟进黄金,钻石,星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?

另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~

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

相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
36 0
|
2月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
2月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
2月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
2月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
4月前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
210 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
5月前
|
机器学习/深度学习 数据采集 人工智能
机器学习算法入门与实践
【7月更文挑战第22天】机器学习算法入门与实践是一个既充满挑战又极具吸引力的过程。通过掌握基础知识、理解常见算法、注重数据预处理和模型选择、持续学习新技术和参与实践项目,你可以逐步提高自己的机器学习技能,并在实际应用中取得优异的成绩。记住,机器学习是一个不断迭代和改进的过程,保持好奇心和耐心,你将在这个领域走得更远。
|
5月前
|
消息中间件 存储 算法
实战算法的基础入门(2)
实战算法的基础入门
|
5月前
|
算法 大数据
实战算法的基础入门(1)
实战算法的基础入门