PAT (Basic Level) Practise

題目集:pat.zju.edu.cn/contests/pat-b-practise

注:個人練習,僅供交流,歡迎指正,禁止商業用途。

B1001

#include <iostream>
using namespace std;
int mainB1001()
{
	int a;
	int count=0;
	cin>>a;
	while(1)
	{
		//cout<<count<<endl;
		if(a==1)
			break;
		else
			count++;

		if(a%2==0)
			//a=a/2;
			a=a>>1;
		else
		{
			a=(3*a+1)>>1;
			//a=(3*a+1)/2;
		}
	}
	cout<<count;
	return 0;
}

B1002


#include<iostream>
#include<string>
#include<map>
#include<sstream>

using namespace std;

int mainB1002()
{
	string a;
	cin>>a;
	int sum=0;

	map<char,string> PyMap;
	typedef pair<char,string> PyPair;
	PyMap.insert(PyPair('0',"ling"));
	PyMap.insert(PyPair('1',"yi"));
	PyMap.insert(PyPair('2',"er"));
	PyMap.insert(PyPair('3',"san"));
	PyMap.insert(PyPair('4',"si"));
	PyMap.insert(PyPair('5',"wu"));
	PyMap.insert(PyPair('6',"liu"));
	PyMap.insert(PyPair('7',"qi"));
	PyMap.insert(PyPair('8',"ba"));
	PyMap.insert(PyPair('9',"jiu"));

	map<char,int> digitMap;
	typedef pair<char,int> digitPair;
	digitMap.insert(digitPair('0',0));
	digitMap.insert(digitPair('1',1));
	digitMap.insert(digitPair('2',2));
	digitMap.insert(digitPair('3',3));
	digitMap.insert(digitPair('4',4));
	digitMap.insert(digitPair('5',5));
	digitMap.insert(digitPair('6',6));
	digitMap.insert(digitPair('7',7));
	digitMap.insert(digitPair('8',8));
	digitMap.insert(digitPair('9',9));

	string::iterator sit;
	for(sit=a.begin();sit!=a.end();sit++)
	{
		sum+=digitMap[*(sit)];
	}

	stringstream ss;
	ss<<sum;
	string ssum=ss.str();

	int i=0;
	for(i=0;i < ssum.length()-1;i++)
	{
		cout<<PyMap[ssum[i]]<<" ";
	}
	cout<<PyMap[ssum[i]];

	

	return 0;
}

B1003

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

int mainB1003()
{
	string s;
	int N;
	int c1,c2,c3,flag;
	bool no;
	cin>>N;
	for(int i=0;i<N;i++)
	{
		cin>>s;
		c1=0;
		c2=0;
		c3=0;
		flag=0;
		no=false;
		string::iterator sit;
		for(sit=s.begin();sit!=s.end();sit++)
		{
			if(*(sit)!='P' && *(sit)!='A' && *(sit)!='T')//"WHATEVER"
			{
				no=true;
				break;
			}
			if(*(sit)=='P')
			{
				if(flag!=0)//"PPAT"
				{
					no=true;
					break;
				}
				else
					flag=1;
				continue;
			}
				
			if(*(sit)=='T')
			{
				if(flag!=1)//"PATT"
				{
					no=true;
					break;
				}
				else
					flag=2;
				continue;
			}
			if(*(sit)=='A')
			{
				switch(flag)
				{
					case 0:c1++;break;
					case 1:c2++;break;
					case 2:c3++;break;
					default:continue;
				}
			}
		}
		if(c1*c2==c3 && c2!=0 && no!=true && flag==2)//"PT",no,"PAA"
			cout<<"YES"<<endl;
		else
			cout<<"NO"<<endl;
	}
	
	return 0;
}

B1004


//其實不用sort(),線性遍歷即可,sort()代碼少點。
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;
struct student
{
	string name;
	string sid;
	int mark;
	// 這是通過運算符重載來sort()
	//bool operator <(const student & anostu) const
	//{return mark<anostu.mark;}
};
// 這是通過比較函數來sort()
bool sortByMark(const student & a,const student & b) //no CONST at tail
{
	return a.mark<b.mark;
}

int mainB1004()
{
	int N;
	cin>>N;

	string name;
	string sid;
	int mark;
	student stu;
	
	vector<student> vstu;

	for(int i=0;i<N;i++)
	{
		cin>>name>>sid>>mark;
		stu.name=name;
		stu.sid=sid;
		stu.mark=mark;

		vstu.push_back(stu);
	}

	// 這是通過運算符重載來sort()
	//sort(vstu.begin(),vstu.end());
	// 這是通過比較函數來sort()
	sort(vstu.begin(),vstu.end(),sortByMark);
	
	cout<<(*vstu.rbegin()).name<<" "<<(*vstu.rbegin()).sid<<endl;
	cout<<vstu[0].name<<" "<<vstu[0].sid;
	return 0;
}

B1005

#include<iostream>
#include<set>
#include<map>

using namespace std;

int mainB1005()
{
	map<int,set<int>> myMap;
	
	int N;
	cin>>N;
	int tmp,a;
	for(int i=0;i<N;i++)
	{
		cin>>tmp;
		a=tmp;
		while(1)
		{
			//cout<<count<<endl;
			if(a==1)
			{
				myMap[tmp].insert(1);
				break;
			}
			else
				myMap[tmp].insert(a);

			if(a%2==0)
				a=a>>1;
			else
				a=(3*a+1)>>1;
		}

	}
	map<int,set<int>>::iterator iit,jit;
WHILELOOP:	
	for(iit=myMap.begin();iit!=myMap.end();iit++)
	{
		for(jit=myMap.begin();jit!=myMap.end();jit++)
		{
			if(((jit->second).find(iit->first))==jit->second.end() || iit==jit)    // if is not contained
			{
				continue;
			}
			else
			{
				myMap.erase(iit);
				goto WHILELOOP;//break;
			}
		}
	}
	int eleNum=myMap.size();
	int count=0;
	map<int,set<int>>::reverse_iterator rit;
	for(rit=myMap.rbegin();rit!=myMap.rend();rit++)
	{
		count++;
		cout<<rit->first;
		if(count!=eleNum)
			cout<<" ";

	}
	return 0;
}

B1006

#include<iostream>

using namespace std;

int mainB1006()
{
	int num;
	int numb,nums,numg;
	cin>>num;
	numb=num/100;
	num%=100;
	nums=num/10;
	num%=10;
	numg=num;
	//cout<<numb<<endl<<nums<<endl<<numg<<endl;
	for(int i=0;i<numb;i++)
		cout<<'B';
	for(int i=0;i<nums;i++)
		cout<<'S';
	for(int i=1;i<=numg;i++)
		cout<<i;
	return 0;
}


B1007


#include<stdio.h>
#include<math.h>

//more effective function.
bool isPrime(int num)
{
     if (num <= 2)
     {
         return num == 2;
     }
     
     if (num % 2 == 0)
     {
         return false;
     }

     int iSqrt = (int)sqrt(double(num));
	 int i;
	 //it is inefficient
     /*
	 for (i = 3; i <= iSqrt,num%i>0; i+=2)
     ;
	 */
	 for (i = 3; i <= iSqrt; i+=2)
	 {
		 if(num%i==0)
			break;
	 }
     return i>iSqrt ? true : false;
}


int mainB1007()
{
	//printf("%d\n",isPrime(11));
	int N;
	int pnum=0;
	int pcount=0;
	int isqrt;
	int t;
	int pv[100000];

	scanf("%d",&N);
	pv[pnum++]=2;
	pv[pnum++]=3;
	for(int i=4;i<=N;i++)
	{

		if(isPrime(i))
			pv[pnum++]=i;
		else
			continue;

	}

	for(int i=0;i<pnum;i++)
	{
		if(pv[i]+2==pv[i+1])
			pcount++;
	}

	printf("%d",pcount);
	return 0;
}


B1008


#include<iostream>

using namespace std;

int mainB1008()
{
	int N,M;
	int a[100];
	int tmp;
	cin>>N>>M;
	M%=N;//if M>=N
	for(int i=0;i<N;i++)
		cin>>a[i];
	for(int i=0;i<M;i++)
	{
		tmp=a[N-1];
		for(int j=N-1;j>0;j--)
		{
			a[j]=a[j-1];
		}
		a[0]=tmp;
	}
	for(int i=0;i<N-1;i++)
		cout<<a[i]<<" ";
	cout<<a[N-1];
	return 0;
}


B1009


#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;
int mainB1009()
{
	/*
	g++下,這樣是可以的。但vc下,需要去掉部分註釋
	*/
	vector<string> sv;
	vector<string>::reverse_iterator rit;
	//string s;
	string word;
	//getline(cin,s);//read a string line
	//stringstream ss(s);
	//while(ss>>word)
	while(cin>>word)//if g++
		sv.push_back(word);
	for(rit=sv.rbegin();rit+1!=sv.rend();rit++)//handle the last one case
		cout<<*rit<<" ";
	cout<<*rit;
	return 0;
}


B1010


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

int mainB1010()
{
	vector<int> cv;
	vector<int> ev;
	vector<int>::iterator cit;
	vector<int>::iterator eit;
	int c,e;
	string s;
	getline(cin,s);
	stringstream ss(s);
	while(ss>>c>>e)
	{
		cv.push_back(c);
		ev.push_back(e);
	}
	if(cv.size()==1)
	{

		cout<<cv[0]*ev[0]<<" "<<(ev[0]==0?0:ev[0]-1);
		return 0;
	}
	for(cit=cv.begin(),eit=ev.begin();cit+2!=cv.end(),eit+2!=ev.end();cit++,eit++)
	{
		cout<<(*cit)*(*eit)<<" "<<*eit-1<<" ";
	}
	cout<<(*cit)*(*eit)<<" "<<*eit-1;
	if(*(eit+1)!=0)
	{
		cit++;eit++;
		cout<<" "<<(*cit)*(*eit)<<" "<<*eit-1;
	}
	
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章