MT1158 分解
输入正整数N和M,判断N是否可以分解成M个不同的正整数的和,输出YES或者NO。
格式
输入格式:输入正整数N和M,空格分隔
输出格式:输出YES或者NO
样例 1
输入:5 2
输出:YES
思路:从1~m遍历m个数,并相加,判断其与n的大小关系,只要小于n都满足条件
注意!!是不同的数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;cin>>n>>m;
int sum=0;
//m个不同的正整数能相加组成的最小正整数
for(int i=1;i<=m;i++)
sum+=i;
//只要比这个最小和要大都可以加一个数来实现要求
//(加在任意一个由上面组成的序列中的数)
if(n>=sum)
cout<<"YES";
else
cout<<"NO";
return 0;
}
MT1162 数组最大公约数
给定一个由N个正整数组成的数组,求所有数组元素的最大公约数。
格式
输入格式:第一行输入数组长度N,第二行输入数组元素,整型,空格分隔。
输出格式:输出整型
样例 1
输入:
3 2 4 6
输出:2
思路:使用辗转相除法按两个两个求最大公约数
#include<bits/stdc++.h>
using namespace std;
int check(int a,int b)
{
if(a<b)
{
int tmp=a;
a=b;b=tmp;
}
while(a&&b)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
//不用判断a与b的大小的写法
// int c;
// while(a%b)
// {
// c=a%b;
// a=b;b=c;
// }
int main()
{
int n;cin>>n;
int tmp1,tmp2;
cin>>tmp1>>tmp2;
int tmp=check(tmp1,tmp2);
for(int i=1;i<n;i++)
{
int tmp3;
cin>>tmp3;
tmp=check(tmp,tmp3);
}
cout<<tmp;
return 0;
}
MT1163 孪生质数
在质数中,若两个质数之差为2,我们称之为孪生质数,例如(3、5)(5、7),输入2个正整数,判断他是不是孪生质数,输出YES或者NO。
格式
输入格式:输入整型
输出格式:输出YES或者NO
样例 1
输入:2 6
输出:NO
注意!!需要对1进行特判,1不是质数,但是check函数中1返回true
#include<bits/stdc++.h>
using namespace std;
bool check(int a)
{
for(int i=2;i<a;i++)
if(a%i==0)
return false;
return true;
}
int main()
{
int a,b;
cin>>a>>b;
//判断特殊情况,1不是质数,但是按照现在的1 3能输出yes
if(a==1||b==1)
{
cout<<"NO";
return 0;
}
if(check(a)&&check(b)&&(abs(a-b)==2))
cout<<"YES";
else
cout<<"NO";
return 0;
}
MT1165 卡罗尔数
卡罗尔数是其值满足4n–2(n+1)–1的整数(n为正整数)。输入正整数N判断它是不是卡罗尔数,输出YES或者NO。
格式
输入格式:输入正整数N
输出格式:输出YES或者NO
样例 1
输入:1
输出:YES
思路:直接遍历,因为num是从-1开始,刚开始时num一定小于n,所有结束条件是num>n
#include<bits/stdc++.h>
using namespace std;
bool check(int n)
{
return 2*n-3;
}
int main( )
{
int n;cin>>n;
int num;
for(int i=1;;i++)
{
num=2*i-3;
if(num==n)
{
cout<<"YES";
return 0;
}
else if(num>n)
{
cout<<"NO";
return 0;
}
}
return 0;
}
MT1167 自守数II
输入正整数N,检查该数是否为自守数输出YES或者NO。当且仅当一个数的平方以与该数相同的数字结尾时,该数称为自守数。
格式
输入格式:输入正整数N
输出格式:输出YES或者NO
样例 1
输入:76
输出:YES
自守数:一个数的平方的尾数等于该数自身的自然数
需要按位进行比较
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;cin>>n;
int m=n*n;
while(n&&m)
{
if(m%10!=n%10)
{
cout<<"NO";
return 0;
}
m/=10;
n/=10;
}
cout<<"YES";
return 0;
}
MT1168 阶乘数
输入正整数N,找出它是否是一个等于其他数的阶乘值的数,输出YES或者NO。
格式
输入格式:输入正整数N
输出格式:输出YES或者NO
样例 1
输入:5
输出:NO
思路:在循环中不断与该数阶乘进行对比
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
int sum=1;
for(int i=1;i<=n;i++)
{
sum*=i;
if(n==sum)
{
cout<<"YES";
return 0;
}
}
cout<<"NO";
return 0;
}