本文主要是介绍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;elsecontinue;}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>=Nfor(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 casecout<<*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;
}
这篇关于PAT (Basic Level) Practise的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!