算法竞赛入门码蹄集新手村600题(MT1401-1450)
Posted 灵彧universe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法竞赛入门码蹄集新手村600题(MT1401-1450)相关的知识,希望对你有一定的参考价值。
算法竞赛入门【码蹄集新手村600题】(MT1401-1450)
@TOC
前言
目录
1. MT1401 归并排序
(1)题目描述
输入10个整型元素,对数组进行归并排序,输出从小到大排序后的新数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int a[100];
for(int i=0;i<10;i++) cin>>a[i];
sort(a,a+10);
for(int i=0;i<10;i++) cout<<a[i]<<" ";
return 0;
2. MT1402 长方体
(1)题目描述
输入10个整型元素,对数组进行归并排序,输出从小到大排序后的新数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int a[100];
for(int i=0;i<10;i++) cin>>a[i];
sort(a,a+10);
for(int i=0;i<10;i++) cout<<a[i]<<" ";
return 0;
3. MT1403 后3位排序
(1)题目描述
输入10个正整数,且每个数均在1000至9999之间。要求按每个数的后3位进行升序排列,如果后三位相等,则按原4位数进行降序排列,输出排序后的结果。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
void ReBubbleSort(int arr[],int len)
for(int i=0;i<len-1;i++)
for(int j=0;j<len-1-i;j++)
if((arr[j]%1000>arr[j+1]%1000)||
(arr[j]%1000 == arr[j+1]%1000 && arr[j]<arr[j+1]))
swap(arr[j],arr[j+1]);
bool cmp(int a,int b)
if((a%1000 < b%1000) || (a%1000 == b%1000 && a>b)) return true;
return false;
int main( )
int a[10],len=10;
for(int i=0;i<len;i++) cin>>a[i];
ReBubbleSort(a,len);
for(int i=0;i<len;i++) cout<<a[i]<<" ";
return 0;
4. MT1404 大大小小排序
(1)题目描述
输入10个整型元素和整数N,M,对数组进行小到大排序,再把下标N到M的元素从大到小排序并输出新数组。
格式
样例1
备注:
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int dp[100];
bool cmp(int a,int b)
return a>b;
int main( )
int n,m;
for(int i=0;i<=9;i++) cin>>dp[i];
cin>>n>>m;
sort(dp,dp+10);
sort(dp+n,dp+m+1,cmp);
for(int i=0;i<=9;i++) cout<<dp[i]<<" ";
cout<<endl;
return 0;
5. MT1405 大大小小排序II
(1)题目描述
输入10个整型元素和整数N,对数组进行小到大排序,再从指定位置N开始按逆序重新排列并输出新数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int dp[100];
bool cmp(int a,int b)
return a>b;
int main( )
int n;
for(int i=0;i<=9;i++) cin>>dp[i];
cin>>n;
sort(dp,dp+10);
sort(dp+n,dp+10,cmp);
for(int i=0;i<=9;i++) cout<<dp[i]<<" ";
cout<<endl;
return 0;
6. MT1406 数字重排
(1)题目描述
输入3个自然数(0~9),把这些数字重新排列组合,组成一个三位数,按从小到大的次序排序放到数组中,最后输出所有的3位数。
格式
样例1
备注:
(2)参考代码
import java.util.Scanner;
import java.util.*;
class Main
public static void main(String[] args)
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
Set<Integer> ans = new TreeSet<>(Comparator.naturalOrder());
ans.add(a*100+b*10+c);
ans.add(a*100+c*10+b);
ans.add(b*100+a*10+c);
ans.add(b*100+c*10+a);
ans.add(c*100+b*10+a);
ans.add(c*100+a*10+b);
for(Integer tmp:ans)
if(tmp>=100)
System.out.println(tmp);
input.close();
7. MT1407 插入
(1)题目描述
输入10个整型元素和一个整数N,对数组进行从小到大排序,然后插入N,不改变原有的次序,输出插入后的新数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,a[15];
for(int i=0;i<10;i++) cin>>a[i];
cin>>n;
a[10]=n;
sort(a,a+11);
for(int i=0;i<11;i++) cout<<a[i]<<" ";
return 0;
8. MT1408 插入
(1)题目描述
在整型有序数组中插入一个元素。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,a[1000],m;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
cin>>m;
a[n]=m;
sort(a,a+n+1);
for(int i=0;i<n+1;i++) cout<<a[i]<<" ";
return 0;
9. MT1409 顺时针旋转数组
(1)题目描述
给定一个含有N个元素的数组,按顺时钟方向将数组旋转M次,每次旋转一个位置。输出新数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
void xuanzhuan(int a[],int n,int m)
int b[1000];
for(int i=0;i<m;i++)
//第一个和最后一个换
b[0] = a[n-1];
//剩下的后移
for(int i=0;i<n-1;i++)
b[i+1] = a[i];
for(int i=0;i<n;i++) a[i]=b[i];
for(int i=0;i<n;i++) cout<<a[i]<<" ";
int main( )
int n,m,a[1000];
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
xuanzhuan(a, n, m);
return 0;
10. MT1410 逆时针旋转数组
(1)题目描述
给定一个含有N个元素的数组,按逆时钟方向将数组旋转M次,每次旋转一个位置。输出新数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
void xuanzhuan(int a[],int n,int m)
int b[1000];
for(int i=0;i<m;i++)
//第一个和最后一个换
b[n-1] = a[0];
//剩下的前移
for(int i=n-2;i>=0;i--)
b[i] = a[i+1];
for(int i=0;i<n;i++) a[i]=b[i];
for(int i=0;i<n;i++) cout<<a[i]<<" ";
int main( )
int n,m,a[1000];
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
xuanzhuan(a, n, m);
return 0;
11. MT1411 旋转数组
(1)题目描述
请编写一个简单程序,输入10个整型元素和整数N([-10,10]),比如-3,表示向左旋转数组3次,比如3,表示向右旋转数组3次,0表示不旋转,输出旋转后的数组。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
void zuoxuanzhuan(int a[],int n,int m)
int b[1000];
for(int i=0;i<m;i++)
//第一个和最后一个换
b[n-1] = a[0];
//剩下的前移
for(int i=n-2;i>=0;i--)
b[i] = a[i+1];
for(int i=0;i<n;i++) a[i]=b[i];
for(int i=0;i<n;i++) cout<<a[i]<<" ";
void youxuanzhuan(int a[],int n,int m)
int b[1000];
for(int i=0;i<m;i++)
//第一个和最后一个换
b[0] = a[n-1];
//剩下的后移
for(int i=0;i<n-1;i++)
b[i+1] = a[i];
for(int i=0;i<n;i++) a[i]=b[i];
for(int i=0;i<n;i++) cout<<a[i]<<" ";
int main( )
int n=10,m,a[1000];
for(int i=0;i<n;i++) cin>>a[i];
cin>>m;
if(m<0)
m=-m;
zuoxuanzhuan(a, n, m);
else if(m>0) youxuanzhuan(a,n,m);
else if(m==0)
for(int i=0;i<n;i++) cout<<a[i]<<" ";
return 0;
12. MT1412 合并
(1)题目描述
编写函数将两个整型有序数组A和B,合并成一个数组C,合并后保持原有的有序性。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,m,a[1000],b[1000],c[2000];
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
for(int i=0;i<(m+n);i++)
if(i<n) c[i]=a[i];
else c[i] = b[i-n];
sort(c,c+m+n);
for(int i=0;i<(m+n);i++) cout<<c[i]<<" ";
return 0;
13. MT1413 并集
(1)题目描述
第一行输入数组长度N和M(都<100),后两行分别输入AB数组元素,全部整型,空格分隔。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,m,a[1000],b[1000],c[2000],cnt=0;
bool flag=true;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(b[i]==a[j])
flag=false;
break;
if(flag)
c[n+cnt]=b[i];
cnt++;
cout<<cnt;
return 0;
14. MT1414 数组的交集
(1)题目描述
给定大小分别为N和M的两个数组A和B,输入正整数N和M,输出两个数组的交集(或公共元素)的总数。(交集中相同元素只会出现一次或者重复的元素只统计—次)
格式
样例1
(2)参考代码
import java.util.*;
class Main
public static void main(String[] args)
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
Set<Integer> a = new HashSet<>();
Set<Integer> b = new HashSet<>();
Set<Integer> ans = new HashSet<>();
for(int i=0;i<n;i++)
a.add(input.nextInt());
for(int i=0;i<m;i++)
b.add(input.nextInt());
ans.addAll(a);
ans.retainAll(b);
System.out.println(ans.size());
input.close();
15. MT1415 大小相同
(1)题目描述
给定一个由N(<10)个正整数组成的数组A,生成一些最小元素和最大元素相同的子数组数(可以仅包含1个元素),统计这些子数组的数量并输出。
注:最大元素和最小元素相同就是数组中的元素全部为同一个值。如数组(1,1),它满足条件的子数组有三个,分别为(1) 、 (1) 、(1,1)
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int a[10]=0;
bool iscount[10] = 0;
int n,num=0;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
if(iscount[i] == true) continue;
int count = 1;
for(int j=i+1;j<10;j++)
if(a[i]==a[j])
count++;
iscount[j]=true;
num += pow(2,count)-1;
cout<<num;
return 0;
16. MT1416 最长子数组
(1)题目描述
整数数组大小为N (<100),找出最多包含整数K个偶数元素的最长子数组(子数组为原数组的前x(0<x<=N)个元素),输出子数组的长度。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int N,K,a[100];
scanf("%d %d",&N,&K);
for(int i=0;i<N;i++) scanf("%d ",&a[i]);
int count=0;
for(int i=0;i<N;i++)
if(a[i]%2==0) count++;
if(count==K+1)
printf("%d",i);
return 0;
printf("%d",N);
return 0;
17. MT1417 连续子序列
(1)题目描述
给定一个正数数组,数组中有N (<100)个元素,找出元素乘积小于等于给定数M的可能连续连续子序列(子数组)的数目。输出这个数。如果子数组中只有一个元素,乘积就等于这个元素。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,m;
int a[100];
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++) scanf("%d ",&a[i]);
int num=0;
for(int i=0; i<n; ++i)
int product = 1;
for(int j=i;j<n;++j)
product *= a[j];
if(product <=m) num++;
else break;
cout<<num;
return 0;
小结(一)
经典范例:
1.排序算法系列:MT1400-1407
- 旋转数组:MT1411
- 并交集:MT1413-1414
- 大小相同:MT1415
- 最长子数组:MT1416
- 连续子序列:MT1417
18. MT1418 元素和
(1)题目描述
定义一个长度为n的整型数组,输入n个数组元素的值,然后输出数组元素和。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,sum=0;;
cin>>n;
int a[1000];
for(int i=0;i<n;i++)
cin>>a[i];
sum+=a[i];
cout<<sum;
return 0;
19. MT1419 数组最值
(1)题目描述
定义一个长度为n的整型数组,输入n个数组元素的值,然后输出数组最大值和最小值。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,max1=0,min1;
cin>>n;
int a[1000];
for(int i=0;i<n;i++)
cin>>a[i];
min1=a[0];
for(int i=0;i<n;i++)
max1=max(a[i],max1);
min1=min(a[i],min1);
cout<<max1<<" "<<min1;
return 0;
20. MT1420 中值
(1)题目描述
给定由N个整数组成的数组A,计算中值并输出。注意,中值不是平均值。如果有奇数个元素,那么中值是按从小到大排列后中间的那个元素的值,如果有偶数个元素,中值是按从小到大排列后中间的那两个元素的平均值(向下取整)。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,a[105];
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
int avg;
if(n%2==1) avg=a[(n+1)/2];
else avg=floor((a[n/2]+a[n/2+1])/2);
cout<<avg;
return 0;
21. MT1421 异或
(1)题目描述
给定一个由N(<1000)个整数组成的数组,把数组元素任意两两进行异或,统计数组中异或的结果为奇数的元素有几对,输出对数。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,number[1000];
cin>>n;
for(int i=0;i<n;i++) cin>>number[i];
int ans=0;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if((number[i]^number[j])%2!=0) ans++;
cout<<ans;
return 0;
22. MT1422 总位数
(1)题目描述
计算数组中N个元素所有数字的总位数。所有元素均为非负数。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,a[1005],len,cnt=0;
string s;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
s = to_string(a[i]);
len = s.size();
cnt+=len;
cout<<cnt<<endl;
return 0;
23. MT1423 被3整除
(1)题目描述
给定一个长度为N的整数数组,找出是否有可能使用这些数字的所有数字构造一个整数,使其可以被3整除。如果可能则输出YES否则输出NO。比如数组arr =40,50,90,则可以构造405090,可以被3整除。但如果arr = 1,4,则只能构造14或者41,都不能被3整除。
不考虑负数或者其他特殊情况。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n;
cin>>n;
int a[1005],x=0;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
while(a[i])
x += a[i]%10;
a[i] /= 10;
if(x%3==0) printf("YES\\n");
else cout<<"NO"<<endl;
return 0;
24. MT1424 卡特兰数序列
(1)题目描述
卡特兰数序列是1,1,2,5,14,42,132,429,1430,4862...输入正整数N(<20),输出第N个卡特兰数字。注:N从O开始计数。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n;
cin>>n;
int a[20];
a[0] = 1;
for(int i=1;i<20;i++) a[i] = (4*i-2)*a[i-1]/(i+1);
cout<<a[n];
return 0;
25. MT1425 小码哥的序列
(1)题目描述
小码哥正在学习序列,这个系列是1,2,5,8,15,28,51...给他一个数字N,他必须找到该级数的N项。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,rec[1005];
cin>>n;
rec[1]=1,rec[2]=2,rec[3]=5,rec[4]=8;
for(int i=5;i<=n;i++)
rec[i] = 2*rec[i-1]-rec[i-4];
cout<<rec[n];
return 0;
26. MT1426 普洛尼克数
(1)题目描述
普洛尼克数是两个连续非负整数积,即n(n+1),输入正整数N输出所有小于或等于N的普洛尼克数。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,div=0,i=0;
cin>>n;
while(1)
div=i*(i+1);
if(div>n)
break;
cout<<div<<" ";
i++;
return 0;
27. MT1427 素数序列
(1)题目描述
输入正整数N(<10000),找到这个序列的第N个数:2,3,5,7,22,23,...等等这个序列的数字,其每位数字都是素数,即2、3、5、7。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
bool bitPrime(int n)
while(n)
int i=n%10;
if(i!=2&&i!=3&&i!=5&&i!=7) return false;
n/=10;
return true;
int main( )
int n;
cin>>n;
int a[10000],count=0;
for(int i=2;count<n;i++)
if(bitPrime(i)) a[count++]=i;
cout<<a[count-1]<<endl;
return 0;
28. MT1428 最小素数因子
(1)题目描述
给定一个含有N(<1000)个元素的数组,他们依次为1,2,3...N,输出所有元素的最小素数因子。整数N的最小素数因子是它的因子中最小的素数。注:所有偶数的最小素数因子为2,素数是它自己的最小素数因子,1的为1。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int miniP(int n)
if(n==1) return 1;
for(int i=2;i<=n;i++)
if(n%i==0) return i;
int main( )
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++)
printf("%d ",miniP(i));
return 0;
29. MT1429 最小正整数
(1)题目描述
给定一个N个数的数组。找到一个特殊的最小正整数K,用K构成一个新数组,新数组中所有的元素都是K,要求:这个新数组的所有元素的乘积大于初始数组的所有元素的乘积。输出K。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int N,a[100]=0;
scanf("%d",&N);
int product=1;
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
product *= a[i];
for(int i=1;;i++)
int j=pow(i,N);
if(j>product)
printf("%d",i);
return 0;
return 0;
30. MT1430 回文数组
(1)题目描述
有一个长度为N(<100)的数组,数组元素依次为1,2,3...N,统计数组中所有小于N的回文数,输出总数。回文数是指正序(从左向右)和倒序(从右向左)读都是—样的整数。注意,所有的个位数都可以看成回文数。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
bool isHuiwen(int n)
int temp=n,newn=0;
while(temp>0)
newn = newn*10 + temp%10;
temp /=10;
if(newn == n) return true;
else return false;
int main( )
int n;
cin>>n;
int count=0;
for(int i=1;i<n;i++)
if(isHuiwen(i)) count++;
cout<<count;
return 0;
31. MT1431 和数组
(1)题目描述
给定一个大小为N的数组A,构造一个大小相同的数组B,使B[i]等于A中除A[i]之外的所有元素的和。输出B。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int A[100],B[100],N,sum=0;
scanf("%d",&N);
for(int i=0;i<N;i++)
scanf("%d",&A[i]);
sum+=A[i];
for(int i=0;i<N;i++)
B[i] = sum - A[i];
printf("%d ",B[i]);
return 0;
32. MT1432 数组赋值
(1)题目描述
有两个含N个整型元素的数组,从键盘输入A数组所有元素,将其——“赋值”给B数组对应的元素,最后输出A数组下标为奇数的元素和B数组下标为偶数的元素。
格式
样例1
备注:
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int A[100]=0,B[100]=0,N;
scanf("%d",&N);
for(int i=0;i<N;i++)
scanf("%d",&A[i]);
for(int i=0;i<N;i++)
B[i] = A[i];
if(N==1)
printf("%d ",B[0]);
return 0;
for(int i=1;i<N;i=i+2) printf("%d ",A[i]);
printf("\\n");
for(int i=0;i<N;i=i+2) printf("%d ",B[i]);
return 0;
33. MT1433 小码哥打车
(1)题目描述
给定一个大小为N的数组arr[],其中每个元素都在0到N-1的范围内。重新排列给定数组,使arr[i]变为arr[arr[i]]。比如arr[]= 4,0,2,1,3,则arr[arr[0]] = arr[4]= 3, arr[arr[1]] = arr[0] = 4。输出新数组。
不考虑不合理的输入等特殊情况。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,arr[10005];
cin>>n;
for(int i=0;i<n;i++) cin>>arr[i];
for(int i=0;i<n;i++) cout<<arr[arr[i]]<<" ";
cout<<endl;
return 0;
34. MT1434 找数字
(1)题目描述
输入一个字符串(包含26个英文字母大小写及﹒空格,不含其他字符),把其中连续的数字作为一个整数,依次存放到一个数组中,输出这些整数的和。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
string s;
getline(cin,s);
int tmp=0,sum=0;
for(int i=0;i<s.length();i++)
if(s[i]<=9&& s[i]>=0)
int t=s[i]-0;
tmp=tmp*10+t;
else
sum+=tmp;
tmp=0;
sum+=tmp;
cout<<sum;
return 0;
小结(二)
经典例题
- 异或:MT1421
- 卡特兰序列:MT1424
-
找规律:MT1425-1432
35. MT1435 分玩具
(1)题目描述
有N个盒子,里面装着数量不等的玩具,分给N个宝宝,确保第i个宝宝分到i个玩具,这样宝贝们才不会哭闹。判断玩具是否足够且刚好分配,输出YES或者NO。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n,a[105],sum=0,res=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) sum+=i;
for(int i=1;i<=n;i++) res+=a[i];
if(sum==res) cout<<"YES";
else cout<<"NO";
return 0;
36. MT1436 不给糖就捣蛋
(1)题目描述
万圣节到了,缅因大街上每一家都给孩子们准备了糖果。小码哥去街上讨糖。小码哥是个有个性有原则的孩子,他从不拿相邻两家人的糖果,比如他从第一家取了糖果,他就会跳过第二家,去第3家或者更后面的人家去取糖果。
请问,小码哥一晚上最多可以获得多少糖果。依次输入每一家的糖果数量,输出最多获得的糖果。不考虑负数或者其他特殊情况。(假定房子数量和每家糖果数量都不超过100)
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int d[100];
int t,n=0;
while(cin>>t) d[n++]=t;
int s[100];
s[0]=d[0];
s[1]=d[1];
for(int i=2;i<n;i++) s[i]=max(s[i-2]+d[i],s[i-1]);
cout<<s[n-1];
return 0;
37. MT1437 对角线
(1)题目描述
编写程序遍历n (< 100)阶方阵主对角线的元素。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n;
cin>>n;
int a[100][100];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
for(int i=0;i<n;i++) cout<<a[i][i]<<" ";
return 0;
38. MT1438 次对角线
(1)题目描述
编写程序遍历n (<100)阶方阵次对角线的元素。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n;
cin>>n;
int a[100][100];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
int j=0;
for(int i=0;i<n;i++)
for(j=n-i-1;j>=0;j--)
cout<<a[i][j]<<" ";
break;
return 0;
39. MT1439 对角线差
(1)题目描述
编写程序遍历n (<100)阶方阵对角线的元素,分别计算主对角线元素和与次对角线元素和,再输出两者的差值。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n;
cin>>n;
int a[100][100];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
//主对角线
int sum1=0;
for(int i=0;i<n;i++)
sum1+=a[i][i];
//此对角线
int sum2=0;
int j=0;
for(int i=0;i<n;i++)
for(j=n-i-1;j>=0;j--)
sum2+=a[i][j];
break;
cout<<sum1-sum2;
return 0;
40. MT1440 右上角
(1)题目描述
输入3X3整型数组,所有元素在0到9之间,然后输出右上角所有元素。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n=3;
int a[100][100];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
//右上角
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(j>=i) cout<<a[i][j]<<" ";
else cout<<" "<<" ";
cout<<endl;
return 0;
41. MT1441 右下角
(1)题目描述
输入3X3整型数组,所有元素在0到9之间,然后输出右下角所有元素。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n=3;
int a[100][100];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
//右下角
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if((j<=1&&i<1)||(j<1&&i<=1)) cout<<" "<<" ";
else cout<<a[i][j]<<" ";
cout<<endl;
return 0;
42. MT1442 左上角
(1)题目描述
输入3X3的整型数组,输出左上角。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int n=3;
int a[100][100];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) cin>>a[i][j];
//右下角
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if((j==2&&i>=1)||(j>=1&&i==2)) cout<<" "<<" ";
else cout<<a[i][j]<<" ";
cout<<endl;
return 0;
43. MT1443 行最值
(1)题目描述
N (<100)阶方阵中,每行都有最大的数,求这N个最大数中最小的一个。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int a[100][100],n;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
int temp[100];
for(int i=0;i<n;i++)
temp[i]=a[i][0];
for(int j=1;j<n;j++)
temp[i]=max(temp[i],a[i][j]);
int temp2 = temp[0];
for(int i=1;i<n;i++) temp2 = min(temp2,temp[i]);
cout<<temp2;
return 0;
44. MT1444 列最值
(1)题目描述
N (<100)阶方阵中,每列都有最小的数,求这N个最小数中最大的一个。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int a[100][100],n;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
int temp[100];
for(int i=0;i<n;i++)
temp[i]=a[0][i];
for(int j=1;j<n;j++)
temp[i]=min(temp[i],a[j][i]);
int temp2 = temp[0];
for(int i=1;i<n;i++) temp2 = max(temp2,temp[i]);
cout<<temp2;
return 0;
45. MT1445 奇偶差
(1)题目描述
输入一个M×N的正整数数组,统计奇数和偶数的个数,输出他们的差值。不考虑非法输入等特殊情况。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int m,n,a[100][100],odd=0;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
if(a[i][j]%2) odd++;
printf("%d-%d=%d",odd,m*n-odd,odd-(m*n-odd));
return 0;
46. MT1446 和与积
(1)题目描述
输入一个M ×N的正整数数组,计算每一行的元素累加和,输出和的乘积。不考虑非法输入或者溢出等特殊情况。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int m,n,a[100][100];
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) scanf("%d",&a[i][j]);
int product=1;
for(int i=0;i<m;i++)
int sum=0;
for(int j=0;j<n;j++)
sum+=a[i][j];
product *= sum;
cout<<product;
return 0;
47. MT1447 行列和
(1)题目描述
输入一个M×N的正整数数组,计算每一行的元素累加和,再计算每一列的元素累加和,输出他们。不考虑非法输入或者溢出等特殊情况。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int m,n,a[100][100];
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) scanf("%d",&a[i][j]);
for(int i=0;i<m;i++)
int sum=0;
for(int j=0;j<n;j++) sum+=a[i][j];
printf("%d ",sum);
printf("\\n");
for(int i=0; i<n; i++)
int sum=0;
for(int j=0;j<m;j++) sum+=a[j][i];
printf("%d ",sum);
return 0;
48. MT1448 周边元素之和
(1)题目描述
编写函数计算m行n列 (m和n小于100)矩阵周边元素之和。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int m,n,a[100][100];
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++) scanf("%d",&a[i][j]);
int sum=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(i==0 || i==m-1 || j==0 || j==n-1) sum+=a[i][j];
cout<<sum;
return 0;
49. MT1449 边沿和内芯
(1)题目描述
有一个Nx N的矩阵,求矩阵四周一圈元素的和,以及内芯(除外圈之外的部分)所有元素的和,输出他们。
格式
样例1
备注:
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
int m,a[100][100];
scanf("%d",&m);
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
scanf("%d",&a[i][j]);
int outSum=0,inSum=0;
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
if(i==0 || i==m-1 || j==0 || j==m-1)
outSum += a[i][j];
else inSum += a[i][j];
printf("%d %d",outSum,inSum);
return 0;
50. MT1450 对称矩阵
(1)题目描述
判断N(<100)阶方阵A是否为对称矩阵,对称矩阵是以对角线为对称轴对应元素相等。
格式
样例1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
bool flag=true;
int m,a[1000][1000];
cin>>m;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
if(i==j) continue;
if(a[i][j] != a[j][i])
flag = false;
break;
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
小结(三)
典型范例:
-
矩形例题:MT1437-1453
结语
希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?
愿你的结局,配得上你一路的颠沛流离。
以上是关于算法竞赛入门码蹄集新手村600题(MT1401-1450)的主要内容,如果未能解决你的问题,请参考以下文章