最近在写PAT乙,这里我整理出一些“较好的”题目的代码(都是C++,给出的前一些题目代码主要是以学习C++为主,适合那些初学C++或巩固学习的,后面都是一些较难的题目,(其中我也没少参考他人的代码,如遇和别人一样的代码的话,你懂得。))
补充一句,用了C++之后,只能说相见恨晚啊,妈妈再也不用担心我用C了。
PAT乙(1001-1040)
1002
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
string num;
stack<int>s;
int count=0;
string c[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
cin>>num;
for(int i=0;i<num.length();i++){
count+=num.at(i)-'0';
}
while(count){
s.push(count%10);
count/=10;
}
int temp=0;
while(!s.empty()){
if(temp==0){
cout<<c[s.top()];
}
else{
cout<<" "<<c[s.top()];
}
temp++;
s.pop();
}
return 0;
}
1005
#include<iostream>
#include<list>
#include<algorithm>//sort()在里面
using namespace std;
bool find(list<int>l,int a)
{
list<int>::iterator iter;
for(iter=l.begin();iter!=l.end();iter++)
{
if(*iter==a) return true;
}
return false;
}
int main()
{
int k;
cin>>k;
int num[k];
int flag=0;
list<int>l;
for(int i=0;i<k;i++){
cin>>num[i];
int temp=num[i];
while(temp!=1){
if(temp%2){
temp=(3*temp+1)/2;
}else{
temp/=2;
}
l.push_back(temp);
}
}
l.unique();//去除重复数字
sort(num,num+k);//默认为非降序排序,注意第二参数是相对常规,多1个位置的指针
for(int i=k-1;i>=0;i--){
if(!find(l,num[i]))
{
if(flag==0)cout<<num[i];
else cout<<" "<<num[i];
flag=1;
}
}
return 0;
}
1008
#include<iostream>
#include<list>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int temp,flag=0;
list<int>l;
list<int>::iterator it;
while(n--){
cin>>temp;
l.push_back(temp);
}
while(m--){
temp=l.back();
l.pop_back();
l.push_front(temp);
}
for(it=l.begin();it!=l.end();it++){
if(flag)cout<<" ";
else flag=1;
cout<<*it;
}
return 0;
}
1009
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
string sentence,stemp;
//cin>>sentence;此方式不可接受空格,改用下面一句话
getline(cin,sentence);
stack<string>s;
bool flag=false;
int t=sentence.find(" ");
while(t!=-1){
stemp=sentence.substr(0,t);
s.push(stemp);
sentence.erase(0,t+1);//清除部分内容
t=sentence.find(" ");
}
s.push(sentence);
while(!s.empty()){
if(flag)cout<<" ";
else flag=true;
cout<<s.top();
s.pop();
}
return 0;
}
1010
#include<iostream>
using namespace std;
int main()
{
int n,m;
bool flag=false;
while(cin>>n>>m){//需要ctrl+z之后enter才能结束
if(n==0&&m==0){
break;
}
if(m==0){
continue;
}
if(flag)cout<<" ";
else flag=true;
cout<<n*m<<" "<<m-1;
}
if(!flag){
cout<<"0 0";
}
return 0;
}
1012
#include<iostream>
#include<iomanip>//setprecision(n)
using namespace std;
int main()
{
int n,a;
cin>>n;
int a1=0,a2=0,a3=0,a5=0;
double a4=0;
int a44=0;
int a22=0;
for(int i=0;i<n;i++){
cin>>a;
switch(a%5){
case 0:
if(a%2==0)a1+=a;
break;
case 1:
if(a22++%2==0)a2+=a;
else a2-=a;
break;
case 2:
a3++;
break;
case 3:
a4+=a;
a44++;
break;
case 4:
if(a>a5)a5=a;
break;
}
}
if(a1==0)cout<<"N ";
else cout<<a1<<" ";
if(a22==0)cout<<"N ";
else cout<<a2<<" ";
if(a3==0)cout<<"N ";
else cout<<a3<<" ";
if(a44==0)cout<<"N ";
else cout<<fixed<<setprecision(1)<<a4/a44<<" ";// fixed表示以普通方式输出,不采用科学计数法,可以 放在setprecision(1)后面
if(a5==0)cout<<"N";
else cout<<a5;
return 0;
}
1015
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct student{
int id;
int d;
int c;
};
bool compare(student a,student b)
{
if(a.d+a.c!=b.d+b.c){
return (a.d+a.c)>(b.d+b.c);
}
else if(a.d!=b.d){
return a.d>b.d;
}
else return a.id<b.id;
}
int main()
{
int n,l,h,count=0;
student stu;
vector<student>v1,v2,v3,v4;//四类
cin>>n>>l>>h;
for(int i=0;i<n;i++){
cin>>stu.id>>stu.d>>stu.c;
if(stu.d>=l&&stu.c>=l){
count++;
if(stu.d>=h&&stu.c>=h){
v1.push_back(stu);
}
else if(stu.d>=h&&stu.c<h){
v2.push_back(stu);
}
else if(stu.d>=stu.c&&stu.d<h&&stu.c<h){
v3.push_back(stu);
}
else v4.push_back(stu);
}
}
sort(v1.begin(),v1.end(),compare);//自定义
sort(v2.begin(),v2.end(),compare);
sort(v3.begin(),v3.end(),compare);
sort(v4.begin(),v4.end(),compare);
cout<<count<<endl;
vector<student>::iterator it;
for(it=v1.begin();it!=v1.end();it++){
cout<<(*it).id<<" "<<(*it).d<<" "<<(*it).c<<endl;
}
for(it=v2.begin();it!=v2.end();it++){
cout<<(*it).id<<" "<<(*it).d<<" "<<(*it).c<<endl;
}
for(it=v3.begin();it!=v3.end();it++){
cout<<(*it).id<<" "<<(*it).d<<" "<<(*it).c<<endl;
}
for(it=v4.begin();it!=v4.end();it++){
cout<<(*it).id<<" "<<(*it).d<<" "<<(*it).c<<endl;
}
return 0;
}
1017
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a;
int b;
int y=0;
cin>>a>>b;
for(int i=0;i<a.length();i++){
int temp=a[i];
a[i]=(y*10+temp-'0')/b+'0';
y=(y*10+temp-'0')%b;
}
if(a[0]=='0'){
if(a.length()!=1)
a.erase(0,1);
}
cout<<a<<" "<<y;
return 0;
}
1019
#include <iostream>
#include<algorithm>
#include<sstream>//stringstream
#include<iomanip>
using namespace std;
int f(string a){
int n=0;
for(int i=0;i<4;i++){
n=n*10+a[i]-'0';
}
return n;
}
bool compare(char a,char b){
return a>b;
}
int main()
{
string a;
int min,max;
cin>>a;
for(int i=0,l=a.length();i<4-l;i++){
a="0"+a;
}
sort(a.begin(),a.end(),compare);
max=f(a);
sort(a.begin(),a.end());
min=f(a);
if(max-min==0)
{
cout<<max<<" - "<<a<<" = "<<"0000"<<endl;
return 0;
}
cout<<max<<" - "<<a<<" = "<<setw(4)<<setfill('0')<<max-min<<endl;
while(max-min!=6174)
{
stringstream b;
b<<max-min;
b>>a;//或a=b.str();
for(int i=0,l=a.length();i<4-l;i++){
a="0"+a;
}
sort(a.begin(),a.end(),compare);
max=f(a);
sort(a.begin(),a.end());
min=f(a);
cout<<max<<" - "<<a<<" = "<<setw(4)<<setfill('0')<<max-min<<endl;
}
return 0;
}
1024
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string a,b;
cin>>a;
int locE=a.find('E'),num;
b=a[1];
b+=a.substr(3,locE-3);//第一参数为起始地址,第二参数为个数 !
char sign=a[0];
stringstream ss;
ss<<a.substr(locE+1);
ss>>num;
if(sign!='+')cout<<"-";
if(num<=-1){
cout<<"0.";
for(int i=num+1;i<0;i++){
cout<<"0";
}
cout<<b<<endl;
}
else{
if(num<b.length()-1)
cout<<b.substr(0,num+1)<<"."<<b.substr(num+1);
else{
cout<<b;
for(int i=num-(b.length()-1);i>0;i--){
cout<<"0";
}
}
}
return 0;
}
1025
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
struct Node{
int add;
int data;
int next;
};
int main()
{
vector<Node> list;
int n,k,i,j;
int first,nextNode;
cin>>first>>n>>k;
Node a[100000];
Node temp;
for(int i=0;i<n;i++){
cin>>temp.add>>temp.data>>temp.next;
a[temp.add]=temp;
}
nextNode=first;
while(nextNode!=-1){
list.push_back(a[nextNode]);
nextNode=a[nextNode].next;
}
int size=list.size();
for( i=0;i<size/k;i++){
for(j=(i+1)*k-1;j>=i*k;j--){
printf("%05d %d ",list[j].add,list[j].data);
if(j==i*k){
if(size>=(i+2)*k)printf("%05d\n",list[(i+2)*k-1].add);
else {
if(size%k==0)cout<<"-1"<<endl;
else
printf("%05d\n",list[(i+1)*k].add);
break;
}
}
else printf("%05d\n",list[j-1].add);
}
}
for(int m=i*k;m<size;m++){
if(m==size-1) printf("%05d %d %d\n",list[m].add,list[m].data,list[m].next);
else printf("%05d %d %5d\n",list[m].add,list[m].data,list[m].next);
}
return 0;
}
1030
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
long long int n,p,count=1,i,j;
cin>>n>>p;
long long int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(i=0;i<n;i++){
for(j=i+count;j<n;j++){
if(a[j]<=a[i]*p)count=j-i+1;
else break;
}
}
cout<<count;
return 0;
}
1033
#include<iostream>
using namespace std;
int main()
{
string a,b;
//cin>>a>>b;//cin不能接受空格
getline(cin,a);
getline(cin,b);
for(int j=0;j<a.length();j++){
for(int i=0;i<b.length();i++){
if('0'<=a[j]&&a[j]<='9'){
if(b[i]==a[j]){
b.erase(i,1);
i--;
}
}
else if(a[j]=='+'){
if('A'<=b[i]&&'Z'>=b[i]){
b.erase(i,1);
i--;
}
}
else if('A'<=a[j]&&'Z'>=a[j]){
if(b[i]==a[j]||(b[i]-'a'+'A')==a[j]){
b.erase(i,1);
i--;
}
}
else if(a[j]=='_'||a[j]=='.'||a[j]==','||a[j]=='-'){
if(b[i]==a[j]){
b.erase(i,1);
i--;
}
}
}
}
if(!b.empty())
cout<<b<<endl;
else cout<<endl;
return 0;
}
1034
#include<iostream>
#include<cmath>
using namespace std;
long long int m(long long int a,long long int b){
long long int c=a%b;
while(c){
a=b;
b=c;
c=a%b;
}
return b;
}
void f(long long int a,long long int b){
long long int t=0,x=0;
if(b==0){
cout<<"Inf";
return;
}
long long int k=m(abs(a),b);
a=a/k;
b=b/k;
t=abs(a)/b;
x=abs(a)-t*b;
if(a<0){
if(t!=0&&x!=0)
cout<<"(-"<<t<<" "<<x<<"/"<<b<<")";
else if(t!=0&&x==0)
cout<<"(-"<<t<<")";
else if(t==0&&x!=0)
cout<<"(-"<<x<<"/"<<b<<")";
}
else{
if(t!=0&&x!=0)
cout<<t<<" "<<x<<"/"<<b;
else if(t!=0&&x==0)
cout<<t;
else if(t==0&&x!=0)
cout<<x<<"/"<<b;
else if(t==0&&x==0)
cout<<"0";
}
}
int main()
{
long long int a1,a2,b1,b2;
scanf("%lld/%lld",&a1,&b1);
scanf("%lld/%lld",&a2,&b2);
f(a1,b1);cout<<" + ";f(a2,b2);cout<<" = ";f(a1*b2+a2*b1,b1*b2);cout<<endl;
f(a1,b1);cout<<" - ";f(a2,b2);cout<<" = ";f(a1*b2-a2*b1,b1*b2);cout<<endl;
f(a1,b1);cout<<" * ";f(a2,b2);cout<<" = ";f(a1*a2,b1*b2);cout<<endl;
f(a1,b1);cout<<" / ";f(a2,b2);cout<<" = ";
if(a2<0)f(-1*a1*b2,b1*a2*-1);
else f(a1*b2,b1*a2);
return 0;
}
1035
#include<iostream>
#include<algorithm>
using namespace std;
int n;
void insort(int a[],int b[]){
int k=0;
for(int i=2;i<=n;i++){
sort(a,a+i);
if(k){
cout<<"Insertion Sort"<<endl;
cout<<a[0];
for(int j=1;j<n;j++){
cout<<" "<<a[j];
}
return ;
}
if(equal(a,a+n,b))
k=1;
}
}
void mesort(int a[],int b[]){
int k=0;
for(int i=2;;i*=2){
for(int j=0;j<n;j+=i){
sort(a+j,a+(j+i<n?j+i:n));
}
if(k){
cout<<"Merge Sort"<<endl;
cout<<a[0];
for(int j=1;j<n;j++){
cout<<" "<<a[j];
}
return ;
}
if(equal(a,a+n,b))
k=1;
if(i>=n)
break;
}
}
int main()
{
cin>>n;
int a1[100],a2[100],b[100];
for(int i=0;i<n;i++){
cin>>a1[i];
a2[i]=a1[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
insort(a1,b);
mesort(a2,b);
return 0;
}
1040
#include<iostream>
using namespace std;
int main()
{
int t=0,at=0,pat=0,i;
string a;
cin>>a;
for(i=a.length()-1;i>=0;i--){
if(a[i]=='T'){
t=t+1;
}
else if(a[i]=='A'){
at=(at+t)%1000000007;
}
else if(a[i]=='P'){
pat=(pat+at)%1000000007;
}
}
cout<<pat<<endl;
return 0;
}