当前位置: 代码迷 >> 综合 >> 杭电OJ100题——2042-2045(C++版)
  详细解决方案

杭电OJ100题——2042-2045(C++版)

热度:18   发布时间:2023-12-15 13:34:55.0

不容易系列之二

Problem Description

你活的不容易,我活的不容易,他活的也不容易。不过,如果你看了下面的故事,就会知道,有位老汉比你还不容易。

重庆市郊黄泥板村的徐老汉(大号徐东海,简称XDH)这两年辛辛苦苦养了不少羊,到了今年夏天,由于众所周知的高温干旱,实在没办法解决牲畜的饮水问题,就决定把这些羊都赶到集市去卖。从黄泥板村到交易地点要经过N个收费站,按说这收费站和徐老汉没什么关系,但是事实却令徐老汉欲哭无泪:

(镜头回放)

近景:老汉,一群羊
远景:公路,收费站

......

收费员(彬彬有礼+职业微笑):“老同志,请交过路费!”

徐老汉(愕然,反应迟钝状):“锅,锅,锅,锅-炉-费?我家不烧锅炉呀?”

收费员(职业微笑依然):“老同志,我说的是过-路-费,就是你的羊要过这个路口必须交费,understand?”

徐老汉(近镜头10秒,嘴巴张开):“我-我-我知道汽车过路要收费,这羊也要收费呀?”

收费员(居高临下+不解状):“老同志,你怎么就不明白呢,那么我问你,汽车几个轮子?”

徐老汉(稍放松):“这个我知道,今天在家里我孙子还问我这个问题,4个!”

收费员(生气,站起):“嘿!老头,你还骂人不带脏字,既然知道汽车四个轮子,难道就不知道这羊有几条腿吗?!”

徐老汉(尴尬,依然不解状):“也,也,也是4个呀,这有关系吗?”

收费员(生气,站起):“怎么没关系!我们头说了,只要是4条腿的都要收费!”

......

(画外音)

由于徐老汉没钱,收费员就将他的羊拿走一半,看到老汉泪水涟涟,犹豫了一下,又还给老汉一只。巧合的是,后面每过一个收费站,都是拿走当时羊的一半,然后退还一只,等到老汉到达市场,就只剩下3只羊了。

你,当代有良知的青年,能帮忙算一下老汉最初有多少只羊吗?

 Input

输入数据第一行是一个整数N,下面由N行组成,每行包含一个整数a(0<a<=30),表示收费站的数量。

 Output

对于每个测试实例,请输出最初的羊的数量,每个测试实例的输出占一行。

 Sample Input

2
1 
2

 Sample Output

4 
6
#include<iostream>
using namespace std;int main(){int n;cin>>n;while(n--){int a;cin>>a;int *arr = new int[30];arr[0] = 4;for(int i =1;i<30;i++)arr[i] = (arr[i-1]-1)*2;cout<<arr[a-1]<<endl;}return 0;
}

 

密码


Problem Description


网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。

 Input

输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。

 Output

对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

 Sample Input

3 
a1b2c3d4 
Linle@ACM 
^~^@^@!%

 Sample Output

NO 
YES
NO

 

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;int main(){int n;cin>>n;getchar();while(n--){char a[50];gets(a);string str = a;//记录四个字符类别int flag1=0,flag2=0,flag3=0,flag4=0;//判断是否为8至16个字符if(str.size()>=8&&str.size()<=16){for(int i=0;i<str.size();i++)if(str[i]>='A'&&str[i]<='Z')flag1 = 1;else if(str[i]>='a'&&str[i]<='z')flag2 = 1;else if(str[i]>='0'&&str[i]<='9')flag3 = 1;elseflag4 = 1;}if(flag1+flag2+flag3+flag4>=3)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;
}

一只小蜜蜂...


Problem Description

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。

 Input

输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。

 Output

对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。

 Sample Input

2 
1 2 
3 6

 Sample Output

1 
3
#include<iostream>
using namespace std;int main(){int n;cin>>n;while(n--){int a,b;cin>>a>>b;long long *arr = new long long[49];arr[0] = 1;arr[1] = 2;//斐波那契数列for(int i=2;i<49;i++)arr[i] = arr[i-1]+arr[i-2];cout<<arr[b-a-1]<<endl;}return 0;
}

不容易系列之(3)—— LELE的RPG难题

Problem Description

人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题:

有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.

以上就是著名的RPG难题.

如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧?

 

Input

输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。

 Output

对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。

 Sample Input

1

2

 Sample Output

3 
6
#include<iostream>
using namespace std;int main(){int n;while(cin>>n){long long *arr = new long long[50];arr[0] = 3;arr[1] = 6;arr[2] = 6;for(int i=3;i<50;i++){arr[i] = arr[i-1] + arr[i-2]*2;}cout<<arr[n-1]<<endl;}return 0;
}