算法竞赛入门【码蹄集新手村600题】(MT1201-1250)
文章目录
- 目录
- 1. MT1201 强数
- 2. MT1202 克里希那穆提数
- 3. MT1203 字母矩阵
- 4. MT1204 字母三角
- 5. MT1205 倒三角
- 6. MT1206 金字塔
- 7. MT1207 倒金字塔
- 8. MT1208 菱形
- 9. MT1209 沙漏
- 10. MT1210 弗洛伊德三角
- 11. MT1211 给定数字的乘法表
- 12. MT1212 乘法表
- 13. MT1213 x个a
- 小结(一)
- 14. MT1214 上三角矩阵
- 15. MT1215 下三角矩阵
- 16. MT1216 数组加法
- 17. MT1217 矩阵乘法
- 18. MT1218 斐波那契数列
- 19. MT1219 斐波那契数列II
- 20. MT1220 斐波那契数列III
- 21. MT1221 小码哥考完咯
- 小结(二)
- 22. MT1122 等差数列
- 23. MT1223 N是什么
- 24. MT1224 棋盘
- 25. MT1225 复杂分数
- 26. MT1126 解不等式
- 27. MT1227 宝宝爬楼梯
- 28. MT1128 宝宝抢糖果
- 29. MT1229 搬家公司
- 30. MT1130 圆周率
- 31. MT1231 圆周率II
- 32. MT1232 数字和
- 33. MT1233 数字之和
- 34. MT1234 一个数字
- 35. MT1235 回文数字
- 36. MT1236 回文
- 37. MT1237 六六大顺
- 38. MT1238 幸运数字3
- 39. MT1239 自恋性数
- 40. MT1240 好多自恋性数
- 小结(三)
- 41. MT1241 大数
- 42. MT1242 三个非负整数
- 43. MT1243 四个正整数
- 44. MT1244 减到0
- 45. MT1245 五年花光
- 46. MT1246 存入的钱
- 47. MT1247 存10年钱
- 48. MT1248 吃桃
- 49. MT1249 练兵
- 50. MT1250 阶梯
- 小结(四)
- 结语
前言
为什么突然想学算法了?
> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~
为什么选择码蹄集作为刷题软件?
码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(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 Fibonacci(int n){
if(n==1 || n==2) return 1;
else return Fibonacci(n-1)+Fibonacci(n-2);
}
int main( )
{
int n=10,num=0;
for(int i=1;i<=n;i++){
num=Fibonacci(i);
cout<<num<<" ";
}
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)参考代码
import java.util.Scanner;
import java.util.*;
class Main {
public static void main(String[] args) {
double i=1.0,j=2.0;
int count =0;
double sum=0;
while(count<20){
double ret=j/i;
double tmp=i;
i=j;
j=tmp+j;
sum+=ret;
count++;
}
System.out.println(String.format("%.2f", sum));
}
}
小结(二)
经典例题: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)参考代码
import java.util.Scanner;
import java.util.*;
class Main {
public static void main(String[] args) {
int max=1000;
double sum=0;
int flag=-1;
for(int n=0;n<=max;n++){
flag*=-1;
sum+=flag*1.0/(2*n+1);
}
System.out.println(String.format("%.2f", 4*sum));
}
}
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)参考代码
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)参考代码
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)参考代码
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)参考代码
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( )
{
double sum1=0,x=0.00553;
for(int a=1;a<=5;a++) sum1=(sum1+1000)/(1+x*12);
printf("%.2lf",sum1);
return 0;
}
46. MT1246 存入的钱
(1)题目描述
假设银行利息月息为0.63%。某人将一笔钱存入银行,打算在今后五年中每年年底都取出1000元,到第五年时刚好取完。求存入的钱应是多少?
格式
输入格式: 无
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式:无
.
输出格式:4039.44
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double sum1=0,x=0.0063;
for(int a=1;a<=5;a++) sum1=(sum1+1000)/(1+x*12);
printf("%.2lf",sum1);
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( )
{
double sum1=0,x=0.0058;
for(int a=1;a<=10;a++) sum1=(sum1+1000)/(1+x*12);
printf("%.2lf",sum1);
return 0;
}
48. MT1248 吃桃
(1)题目描述
猴子摘了一堆桃,第一天吃了一半又多吃了一个,第二天把剩下的吃了一半,又多吃了一个。以后每天都吃了一半零一个。到第10天,只剩下一个,问原本又多少个桃子。
格式
输入格式: 无
.
输出格式: 输出整型
样例1
输入格式:无
.
输出格式:1534
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n=10,x=1;
for(int i=0;i<9;i++) x=(x+1)*2;
cout<<x;
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)参考代码
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( )
{
int n=7;
while(1){
if(n%2==1&&n%3==2&&n%5==4&&n%6==5){
cout<<n;
break;
}
n+=7;
}
return 0;
}
小结(四)
- 整除范例:MT1241、MT1242、MT1243、MT1244、MT1250
结语
近期会逐步将码题集题库中的新手村600题刷完,预计每天会更新50题,之后会逐步跟进黄金,钻石,星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?
另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~
愿你的结局,配得上你一路的颠沛流离。