A:
思路:
即不断循环,循环中每次对蒜头君手里的钱加60万,对房价乘以(1+k/100),直到大于的时候输出年数。同时如果循环中超过20年,则输出Impossible。
代码:
#include <iostream>
using namespace std;
int main(){
double N,K;
cin>>N>>K;
K=K/100;
double cnt=1;
double Q=N;
double tot=200;
while(Q<tot){
cnt++;
Q+=N;
tot=tot*(1+K);
if(cnt>20) break;
}
if(cnt<=20){
cout<<cnt<<endl;
}else{
cout<<"Impossible"<<endl;
}
return 0;
}
B:
题意:
思路:
即用两个二维数组分别记录原来的队伍,和要转化成的队伍。一共只需要转化三次,如果旋转三次后还没有相同的,则不可能有相同的了。主要的点在于旋转,即通过横纵坐标的转化,来实现旋转,如图:。然后通过和所需要的坐标的一一对比,看是否得到所需要的矩阵。
代码:
#include <iostream>
using namespace std;
int a[30][30];
int b[30][30];
int c[30][30];
int n;
int tot;
void f1(){ //旋转函数
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
c[j][n+1-i]=a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=c[i][j];
}
}
tot++;
}
bool judge(){
int ret=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]!=b[i][j]){
ret=0;
break;
}
}
}
return ret;
}
int main(){
tot=0;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>b[i][j];
}
}
for(int i=0; i<=3;i++){
if(judge()){
cout<<tot<<endl;
return 0;
}
f1();
}
cout<<-1<<endl;
return 0;
}
C:
思路:
即用string依次读取每一个字符串,然后判断其中字符的ASCII码的大小,由密文和明文的转化可知。是向后移动了五位,所以可以根据不同的ASCII码来进行不同的转化,如图:
。然后依次输出所转化的即可。
代码:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main(){
char c;
string a;
int b;
while(cin>>a){
for(int i=0;i<a.length();i++){
b=a[i];
if(b>=65 && b<=69){
b=b+21;
c=b;
cout<<c;
}else if(b>=70 && b<=90){
b=b-5;
c=b;
cout<<c;
}else{
cout<<a[i];
}
}
cout<<" ";
}
cout<<endl;
return 0;
}
D:
题意:
思路:
即用两个变量分别记录2和1的数量,然后每到一个变化点,就计算前面的2和1的数量最小的那个,记录下来,并与之前记录的这个数进行比较,如果更大,则更新。然后转折点过后,清空所转折的数,并继续计算。注意最后循环结束后,不会有转折点,所以最后要自己再加一步。
代码:
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int Max;
int num[3];
int n;
int now=0, last=0;
int main(){
cin>>n;
memset(num,0,sizeof(num));
for(int i=0; i<n;i++){
cin>>now;
if(now!=last){
last=now;
int t=min(num[1],num[2]);
if(t>Max) Max=t;
num[now]=0;
}
num[now]++;
}
int t=min(num[1],num[2]);
if(t>Max) Max=t;
cout<<2*Max<<endl;
return 0;
}