A題題解:判斷a和b的大小即可
AC代碼:
#include <iostream>
using namespace std;
const int maxn = 55;
#define _for(i,a,b) for(int i=a;i<=b;i++)
int n,m,a[maxn];
int main(int argc, char const *argv[])
{
cin>>n>>m;
if(n<=m)cout<<n<<endl;
else cout<<n-1<<endl;
return 0;
}
B題題解:最大結果就是三者的最大值一直乘下去然後求和
AC代碼:
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char const *argv[])
{
int a,b,c,d;
cin>>a>>b>>c>>d;
int ans = max(a,b);
ans = max(ans,c);
int sum = ans;
while(d>0)
{
ans*=2;
d--;
}
sum = a+b+c+ans-sum;
cout<<sum<<endl;
return 0;
}
C題題解:no的情況只有單個#的時候,所以直接判斷是否存在單#即可
AC代碼:
#include <iostream>
using namespace std;
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 55;
char s[maxn][maxn];
int n,m,ans;
int xx[]={1,-1,0,0},yy[]={0,0,1,-1};
bool check(int x,int y)
{
_for(i,0,3)
{
int nowx = x+xx[i];
int nowy = y+yy[i];
if(nowx>n||nowx<1||nowy>m||nowy<1)continue;
if(s[nowx][nowy]=='#')return false;
}
return true;
}
int main(int argc, char const *argv[])
{
cin>>n>>m;
_for(i,1,n)
{
_for(j,1,m)cin>>s[i][j];
}
_for(i,1,n)
{
_for(j,1,m)if(s[i][j]=='#')if(check(i,j))ans = 1;
}
if(ans)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
return 0;
}
D題題解:找N個數,其中任意五個數和爲合數,那麼先質數篩篩出小於55555的質數,然後找n個質數,每個質數都滿足%5==1,那麼最後和就是合數。
AC代碼:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 55699;
int n,sum,prime[maxn],isprime[maxn],ans[maxn];
void ge()
{
_for(i,2,maxn)
{
if(prime[i]==0)
{
isprime[++sum]=i;
for(int j=i*2;j<=maxn;j+=i)prime[j]=1;
}
}
}
int main(int argc, char const *argv[])
{
cin>>n;
ge();
int k = 0;
_for(i,1,sum)
{
if(isprime[i]%5==1)
{
cout<<isprime[i]<<" ";
k++;
}
if(k==n)
{
cout<<endl;
return 0;
}
}
return 0;
}