PAT-Basic刷题1000-1010

1001 害死人不偿命的(3n+1)猜想

#include 

int Callatz(int N){
    int count=0;
    while(N!=1){
        if(N%2==1){
            N=(3*N+1)/2;
            count++;
        }
        else if(N%2==0){
            N=N/2;
            count++;
        }
    }
    return count;
}

int main(){
    int m,cnt=0;
    scanf("%d",&m);
    cnt=Callatz(m);
    printf("%d",cnt);
    return 0;
}

1002 写出这个数
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

#include
#include
#include
using namespace std;
string ch[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
    int sum=0;
    string str;
    while(cin>>str){
        for(int i=0;i<str.size();i++)
            sum+=str[i]-'0';
        if(sum/100==0&&sum%100/10==0)
            cout<<ch[sum%100%10]<<endl;
        else if(sum/100==0&&sum%100/10!=0)
            cout<<ch[sum%100/10]<<" "<<ch[sum%10]<<endl;
        else
            cout<<ch[sum/100]<<" "<<ch[sum%100/10]<<" "<<ch[sum%10]<<endl;
    }
    return 0;
}

1003 我要通过!

#include
#include
#include
using namespace std;
int main(){
    int n;
    cin>>n;
    while(n--){
        string s;
        cin>>s;
        int left=0,right=0,mid=0,p=0,t=0;
        for(int i=0;i<s.size();i++){
            if(s[i]=='A'&&p==0&&t==0){
                left++;
                continue;
            }
            if(s[i]=='P'){
                p++;continue;
            }

            if(s[i]=='A'&&p==1&&t==0){
                mid++;continue;
            }
            if(s[i]=='T'&&mid>=1){
                 t++;continue;
            }

            if(s[i]=='A'&&p==1&&t==1){
                right++;continue;
            }
            else break;
        }
        if(p==1&&t==1&&left*mid==right)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

1004 成绩排名
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

#include
#include
#include
using namespace std;
struct Student{
    string name;
    string num;
    int score;
};

int main(){
    int n;
    while(cin>>n){
        Student s[n];
        int nin=0,nax=0;
        for(int i=0;i<n;i++){
            cin>>s[i].name>>s[i].num>>s[i].score;
            if(s[i].score>s[nax].score)
                nax=i;
            if(s[i].score<s[nin].score)
                nin=i;
        }
        cout<<s[nax].name<<" "<<s[nax].num<<endl;
        cout<<s[nin].name<<" "<<s[nin].num<<endl;
    }
    return 0;
}
**1006 换个格式输出整数**

```cpp
#include
#include
#include
using namespace std;
int main(void){
    int n;
    while(cin>>n){
        int bai=n/100,shi=n%100/10,ge=n%10;
        for(int i=0;i<bai;i++)
            cout<<'B';
        for(int i=0;i<shi;i++)
            cout<<'S';
        for(int i=0;i<ge;i++)
            cout<<i+1;
        cout<<endl;
    }
    return 0;
}

1005 继续(3n+1)猜想

#include
#include
#include
using namespace std;
int arr[10000];
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int k,n,flag=0;
    cin>>k;
    vector<int> v(k);
    for(int i=0;i<k;i++){
        cin>>n;
        v[i]=n;
        while(n!=1){
            if(n%2==1) n=3*n+1;
            n/=2;
            if(arr[n]==1) break;
            arr[n]=1;
        }
    }
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<v.size();i++){
        if(arr[v[i]]==0){
            if(flag==1) cout<<" ";
            cout<<v[i];
            flag=1;
        }
    }
    return 0;
}

1007 素数对猜想

#include
#include
#include
using namespace std;
bool prime(int n){
    for(int i=2;i*i<=n;i++){
        if(n%i==0) return false;
    }
    return true;
}
int main(void){
    int n;
    cin>>n;
    int count=0;
    for(int i=5;i<=n;i++){
        if(prime(i-2)&&prime(i))
            count++;
    }
    cout<<count;
    return 0;
}

1008 数组元素循环右移问题

#include
#include
#include
using namespace std;
int main(void){
    int m,n;
    cin>>m>>n;
    vector<int> a(m);
    for(int i=0;i<m;i++)
        cin>>a[i];
    n%=m;
    if(n!=0){
        reverse(a.begin(),a.begin()+m);
        reverse(a.begin(),a.begin()+n);
        reverse(a.begin()+n,a.begin()+m);
    }
    for(int i=0;i<m-1;i++)
        cout<<a[i]<<" ";
    cout<<a[m-1]<<endl;
    return 0;
}

1009 说反话

#include 
#include 
using namespace std;
int main() {
    stack<string> str;
    string s;
    while(cin>>s){
        str.push(s);
    }
    cout<<str.top();
    str.pop();
    while(!str.empty()){
        cout<<" "<<str.top();
        str.pop();
    }
    return 0;
}

1010 一元多项式求导

#include
#include
#include
using namespace std;
int main(void){
    int a,b;
    int flag=0;
    while(cin>>a>>b){
        if(b!=0){
            if(flag==1)
                cout<<" ";
            cout<<a*b<<" "<<b-1;
            flag=1;
        }
    }
    if(flag==0)
        cout<<"0 0";
    return 0;
}

你可能感兴趣的:(C++)