1.猴子分香蕉
解题思路:这题属于暴力模拟,直接看代码吧。
#include<iostream>
using namespace std;
int main()
{
for(int i=17;;i++)
{
if(i%5==1)
{
int a=(i-1)/5*4;
if(a%5==2)
{
int b=(a-2)/5*4;
if(b%5==3)
{
int c=(b-3)/5*4;
if(c%5==4)
{
int d=(c-4)/5*4;
if(d%5==0)
{
cout<<i;
return 0;
}
}
}
}
}
}
}
2.等差数列
解题思路:
模拟,考的是数学知识,等差数列的公式
#include <iostream>
#include <algorithm>
using namespace std;
long long a[100001];
int gcd(int a,int b)//求最大公约数
{
return b ? gcd(b,a%b) :a;
}
int main()
{
int n,i;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);//排序
int d=a[1]-a[0];
for(int i=2;i<n;i++)
{
d=gcd(d,a[i]-a[i-1]);//取最大公约数,也化简到最简
}
if(a[n-1]==a[0])cout<<n<<endl;//考虑特殊情况
else
cout<<((a[n-1]-a[0])/d)+1<<endl;//等差数列公式
return 0;
}
3.平方序列
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
for(int x=2020;x<10000;x++)
{
int a=x*x*2-2019*2019;//等差数列性质
int y=sqrt(a);
if(y*y==a)//因为题目要求是整数,sqrt开出来可能不是整数所以需要判断一下
{
cout<<x+y<<endl;
return 0;
}
}
return 0;
}