[蓝蓝计算机考研算法训练二期]-day03

101 阅读1分钟

4、一个小球从10m处落下,每次的弹回之前的高度一半,请问小球在静止之前一共走过多少距离。

思路

初始距离即为小球高度,此后依次加上先前高度一半的两倍,直到高度<=0。

具体实现

#include<iostream>
using namespace std;

int main(){
	double h=10.0;
	double d=10.0;
	while(h>0){
		h/=2;
		d+=h*2;
	}
	cout<<d;
}

5、我要通过!

“答案正确"是自动判题系统给出的最令人欢喜的回复。本题属于PAT 的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是: 1.字符串中必须仅有P、A、T这三种字符,不可以包含其它字符; 2.任意形如xPATx的字符串都可以获得“答案正确”,其中x或者是空字符串,或者是仅由字母A组成的字符串; 3.如果aPbTc是正确的,那么 aPbATca也是正确的,其中 a、b、c均或者是空字符串,或者是仅由字母 A组成的字符串。 现在就请你为PAT写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含1个测试用例。第1行给出一个正整数n(<=10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。

输入样例:

10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
ΑΡAAAΤAA
APT
ΑΡATΤAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

具体实现

#include<iostream>
#include<string> 
using namespace std;

int main(){
	int numOfString;
	while(cin>>numOfString) 
	{
		string* strings=new string[numOfString];
		for(int i=0;i<numOfString;i++){
			cin>>strings[i];
			bool flag=true;
			for(int j=0;j<(int)strings[i].length();j++){
				if(strings[i][j]!='P'&&strings[i][j]!='A'&&strings[i][j]!='T')
				{
					flag=false;
					break;
				}
			}
			size_t size=NULL;
			size_t first_p=strings[i].find('P',size);
			size_t first_t=strings[i].find('T',size);
			int first_gap=first_p;
			int second_gap=first_t-first_p-1;
			int third_gap=strings[i].length()-first_t-1;
			
			if(first_gap*second_gap!=third_gap)
			  flag=false;
			if(second_gap==0)
			  flag=false;
			if(flag==false){
				cout<<"NO"<<endl;
			}
			else{
				cout<<"YES"<<endl;
			}
		}
	}
}