程序设计思维与实践 Week11 作业 (3/4/数据班)
A - 必做题11-1
问题分析
在20年内,年积攒的收入和房价,逐年做比较,达到了就认为可买下,20年还未达到则输出impossible
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N, K;
cin>>N>>K;
int M=1;
double in=N;
double S=200;
while(M<=20)
{
if(in>=S){
break;
}
M++;
in+=N;
S*=(1+(double)K/100.0);
}
if(M>20){
cout<<"Impossible"<<endl;
}
else{
cout<<M<<endl;
}
return 0;
}
B - 必做题11-2
问题分析
看一下代码吧,里边列出了旋转的公式,按照公式算出三种旋转后的方阵,存在矩阵里,再注意和老师的要求做对比。
#include<bits/stdc++.h>
using namespace std;
int mtrx[5][25][25];//0,1,2,3分别代表0,90,180,270旋转,4代表老师期望
int n;
bool is_equal(int k)
{
bool ans=1;
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
if(mtrx[k][i][j]!=mtrx[4][i][j]){
ans=0;
break;
}
}
}
return ans;
}
int main()
{
cin>>n;
int tmp;
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
cin>>tmp;
mtrx[0][i][j]=tmp;
mtrx[1][j][n-i-1]=tmp;
mtrx[2][n-i-1][n-j-1]=tmp;
mtrx[3][n-j-1][i]=tmp;
}
}/*
for(int k=0;k<4;++k){
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
cout<<mtrx[k][i][j]<<' ';
}
cout<<endl;
}
cout<<endl;
}*/
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
cin>>tmp;
mtrx[4][i][j]=tmp;
}
}
for(int k=0;k<4;++k){
if(is_equal(k)){
cout<<k<<endl;
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}
C - 必做题11-3
问题分析
思路同上题,确定映射关系,然后解密即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
int len=s.length();
for(int i=0;i<len;++i){
if(s[i]>='F'&&s[i]<='Z'){
cout<<(char)((int)s[i]-5);
}
else if(s[i]>='A'&&s[i]<='E'){
cout<<(char)((int)s[i]+21);
}
else{
cout<<s[i];
}
}
cout<<endl;
return 0;
}
D - 必做题11-4
问题分析
参考了别人的代码,这个题自己当时完全不会做。
#include <bits/stdc++.h>
using namespace std;
//参考了他人的代码
int main()
{
int n;
int cnt1=0,cnt2=0;
int mx=0;
int a[100000+5];
cin>>n;
for (int i=0;i<n;i++){
cin>>a[i];
}
for (int i=0; i<n; i++)
{
if(a[i]==1)
{
cnt1++;
if(a[i+1]!=1)
{
if(cnt1>=cnt2)
mx=max(mx,2*cnt2);
else
mx=max(mx,2*cnt1);
cnt2=0;
}
}
else if(a[i]==2)
{
cnt2++;
if(a[i+1]!=2)
{
if(cnt1>=cnt2)
mx=max(mx,2*cnt2);
else
mx=max(mx,2*cnt1);
cnt1=0;
}
}
}
cout<<mx<<endl;
return 0;
}