A
题目描述:
解题思路:计算出房子每年增长的函数money+=money*k/100;只要累加的钱有一年大于就可以了,并且小于等于20年
#include<iostream>
using namespace std;
int main()
{
double money=200.0;
int n,k;
cin>>n>>k;
int N=n;
int i=1;
while(i<=20&&N<money)
{
i++;
N+=n;
money+=money*k/100;
//cout<<N<<" "<<money<<endl;
}
if(i<=20) cout<<i;
else cout<<"Impossible";
return 0;
}
B
题目描述:
解题思路:这道题重点就是弄清楚旋转是怎么写的就可以了,每次都在前一次的基础上旋转90°即可。旋转方程:s_s[i][j]=s[n-j+1][i];
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=25;
int s[maxn][maxn],t[maxn][maxn];
int n;
bool pan()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(s[i][j]!=t[i][j]) return false;
}
}
return true;
}
void xuanzhuan()
{
int s_s[maxn][maxn];
//memset(g,0,sizeof(g));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
s_s[i][j]=s[n-j+1][i];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
s[i][j]=s_s[i][j];
}
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// {
// cout<<s[i][j]<<" ";
// }
// cout<<endl;
// }
// cout<<endl;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>s[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>t[i][j];
}
}
// cout<<endl;
// xuanzhuan();
// xuanzhuan();
// xuanzhuan();
int ans=-1;
if(pan()) ans=0;
else{
//cout<<"旋转1:"<<endl;
xuanzhuan();
if(pan()) ans=1;
else{
//cout<<"旋转2:"<<endl;
xuanzhuan();
if(pan()) ans=2;
else{
//cout<<"旋转3:"<<endl;
xuanzhuan();
if(pan()) ans=3;
}
}
}
cout<<ans;
return 0;
}
C
题目描述:
这道题和之前做过的一个转盘有点类似,就是要注意前五个的解决方式和后面的不太一样就可以了
实现代码如下:
#include<stdio.h>
#include<string.h>
char s[210];
int main()
{
//string s;
while(scanf("%[^\n]",s)!=EOF)
{
int n=strlen(s);
for(int i=0;i<n;i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
if(s[i]>='F') s[i]-=5;
else s[i]=s[i]-5+26;
}
}
for(int i=0;i<n;i++) printf("%c",s[i]);
printf("\n");
getchar();
}
// for(int i=0;i<n;i++)
// cout<<s[i];
}
D
题目描述:
解题思路:这道题就是区间更新,分情况讨论就可以了
#include <iostream>
using namespace std;
const int maxn=100010;
int n;
int a[maxn];
int ans=0;
int cnt1=0,cnt2=0;
bool c1=0,c2=0;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
if(a[0]==1) cnt1++,c1=1;
else if(a[0]==2) cnt2++,c2=1;
for(int i=1;i<n;i++)
{
if(a[i]==1)
{
if(c1) cnt1++;
if(c2) //到新区间,更新ans,清空另一个数
{
ans=max(ans,min(cnt1,cnt2));
cnt1=1;
c1=1,c2=0;
}
}
else if(a[i]==2)
{
if(c2) cnt2++;
if(c1)
{
ans=max(ans,min(cnt1,cnt2));
cnt2=1;
c1=0,c2=1;
}
}
}
//处理结尾的两个区间
ans=max(ans,min(cnt1,cnt2));
cout<<ans*2<<endl;
}