程序设计思维与实践 Week11 作业 (3/4/数据班)

程序设计思维与实践 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;
}

原文地址:https://www.cnblogs.com/master-cn/p/12904782.html