11.1
蒜头君从现在开始工作,年薪 N 万。他希望在蒜厂附近买一套 60 平米的房子,现在价格是 200万。假设房子价格以每年百分之 K 增长,并且蒜头君未来年薪不变,且不吃不喝,不用交税,每年所得 N 万全都积攒起来,问第几年能够买下这套房子?(第一年年薪 N 万,房价 200 万)
输入格式一行,包含两个正整数 N(10≤N≤50)K(1≤K≤20),中间用单个空格隔开。输出格式如果在第 20年或者之前就能买下这套房子,则输出一个整数 M,表示最早需要在第 M 年能买下;否则输出"Impossible"。输出时每行末尾的多余空格,不影响答案正确性
样例输入
50 10
样例输出
8
思路
用循环解方程即可。
代码
#include<iostream>
using namespace std;
double N,K;
double y=1;
double p=200;
int main(){
cin>>N>>K;
while(y<=20){
if(y*N>=p)
break;
else{
y++;
p+=p*K/100;
}
}
if(y<=20)
cout<<y<<endl;
else
cout<<"Impossible"<<endl;
return 0;
}
11.2
蒜头君的班级里有 n^2 个同学,现在全班同学已经排列成一个 n∗n 的方阵,但是老师却临时给出了一组新的列队方案为了方便列队,所以老师只关注这个方阵中同学的性别,不看具体的人是谁这里我们用 0 表示男生,用 1 表示女生现在蒜头君告诉你同学们已经排好的方阵是什么样的,再告诉你老师希望的方阵是什么样的他想知道同学们已经列好的方阵能否通过顺时针旋转变成老师希望的方阵不需要旋转则输出 0顺时针旋转 90° 则输出 1顺时针旋转 180° 则输出 2顺时针旋转 270° 则输出 3若不满足以上四种情况则输出 −−1若满足多种情况,则输出较小的数字输入格式第一行为一个整数 n接下来的 n 行同学们已经列好的 01方阵;再接下来的 n 行表示老师希望的的01 方阵。输出格式输出仅有一行,该行只有一个整数,如题所示。数据范围对于 100% 的数据中,1≤n≤20输出时每行末尾的多余空格,不影响答案正确性
样例输入
4
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
样例输出
1
代码
#include<iostream>
using namespace std;
int n;
int m1[25][25];
int m2[25][25];
int flag1=1,flag2=1,flag3=1,flag4=1;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>m1[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>m2[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(m1[i][j]!=m2[i][j])
{
flag1=0;
break;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(m2[i][j]!=m1[n-j+1][i]){
flag2=0;
break;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(m2[i][j]!=m1[n-i+1][n-j+1]){
flag3=0;
break;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(m2[i][j]!=m1[j][n-i+1]){
flag4=0;
break;
}
}
if(flag1)
cout<<"0"<<endl;
else if(flag2)
cout<<"1"<<endl;
else if(flag3)
cout<<"2"<<endl;
else if(flag4)
cout<<"3"<<endl;
else
cout<<"-1"<<endl;
return 0;
}
11.3
Julius Caesar 曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后 555 位对应的字符来代替,这样就得到了密文。比如字符’A’用’F’来代替。如下是密文和明文中字符的对应关系。
密文A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明文V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
你的任务是对给定的密文进行解密得到明文。你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。输入格式一行,给出密文,密文不为空,而且其中的字符数不超过 200200200。输出格式输出一行,即密文对应的明文。输出时每行末尾的多余空格,不影响答案正确性
样例输入
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
样例输出
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
代码
#include<iostream>
#include<cstring>
using namespace std;
string s;
int main(){
getline(cin,s);
int i=0;
while(i<s.size()){
if(s[i]>='A'&&s[i]<='Z')
{
if(s[i]>='A'&&s[i]<='E')
s[i]=s[i]+21;
else
s[i]=s[i]-5;
}
i++;
}
cout<<s<<endl;
return 0;
}
11.4
东东和他的女朋友(幻想的)去寿司店吃晚餐(在梦中),他发现了一个有趣的事情,这家餐厅提供的 n 个的寿司被连续的放置在桌子上 (有序),东东可以选择一段连续的寿司来吃
东东想吃鳗鱼,但是东妹想吃金枪鱼。核 平 起 见,他们想选择一段连续的寿司(这段寿司必须满足金枪鱼的数量等于鳗鱼的数量,且前一半全是一种,后一半全是另外一种)我们用1代表鳗鱼,2代表金枪鱼。
比如,[2,2,2,1,1,1]这段序列是合法的,[1,2,1,2,1,2]是非法的。因为它不满足第二个要求。
东东希望你能帮助他找到最长的一段合法寿司,以便自己能吃饱。
Input输入:
第一行:一个整数n(2≤n≤100000),寿司序列的长度。
第二行:n个整数(每个整数不是1就是2,意义如上所述)
Output输出:一个整数(代表东东可以选择的最长的一段连续的且合法的寿司)
Examples Input
7
2 2 2 1 1 2 2
Output
4
Input
6
1 2 1 2 1 2
Output
2
Input
9
2 2 1 1 1 2 2 2 2
Output
6
思路
从头开始遍历序列,并且记录当前遍历的是1还是2,并且用cnt1和cnt2表示1和2的个数,len表示目前单个序列的最大长度,即最后结果的1/2.如果当前遍历的是1,遇到2的时候:
len=max(len,min(cnt1,cnt2));
cnt1=1;
cur=1;
遇到一的时候就继续将计数的cnt1++。同理当前遍历2的时候遇到1也是如此。
代码
#include <iostream>
using namespace std;
int n;
int a[100010];
int len=0;
int cnt1=0,cnt2=0;
int cur;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
if(a[0]==1) cnt1++,cur=1;
else if(a[0]==2) cnt2++,cur=2;
for(int i=1;i<n;i++)
{
if(a[i]==1)
{
if(cur==1) cnt1++;
if(cur==2)
{
len=max(len,min(cnt1,cnt2));
cnt1=1;
cur=1;
}
}
else if(a[i]==2)
{
if(cur==2) cnt2++;
if(cur==1)
{
len=max(len,min(cnt1,cnt2));
cnt2=1;
cur=2;
}
}
}
len=max(len,min(cnt1,cnt2));
cout<<len*2<<endl;
}
总结
本次四道题比较简单,应该是T1,T2的难度,尽量不要出错。