PAT乙级(2025)

PAT1001

#include<iostream>
using namespace std;

int main()
{
//     cout<<"请输入一个数字"<<endl;
    int n;
    cin>>n;
    int i=0;
    while(n!=1)
    {
        if(n%2==0)
        {
            i++;
            n=n/2;}
        else if(n%2!=0)
        {
            i++;
            n=(3*n+1)/2;}
    }
    cout<<i<<endl;
    return 0;
}

PAT1002(单行字符串的输入与读取,cin,get,getline等使用)

#include <iostream>
#include <string>

using namespace std;

int main() {
      string chinesePinYin[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

    string s;
    cin>>s;
    /*
     * 字符串的输入处理
     */
    int length=s.length();

    int sum=0;

    for(int i=0;i<length;i++){
        sum+=s[i]-'0';
    }
//    cout<<sum<<endl;

    string num= to_string(sum);

//    cout<<sum<<endl;

    for(int i=0;i<(int)num.length();i++){
        if(i!=0){
            cout<<" ";
        }
        cout<<chinesePinYin[num[i]-'0'];
    }
    return 0;
}

PAT1003(读取指定个数的字符串)

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

using namespace std;

int main()
{
    int n;
    cin>>n;     //字符串个数

    for(int i=0;i<n;i++)
    {
        string s;
        cin>>s;

        int length=s.length();
        bool flag=true;
        map<char,int> m;
        int index_p,index_t;
        for(int j=0;j<length;j++)
        {
            switch(s[j])
            {
            case 'P':
                m['P']++;
                index_p=j;
                break;

            case 'A':
                m['A']++;
                break;

            case 'T':
                m['T']++;
                index_t=j;
                break;
            default:
                flag=false;
                break;
            }
        }
        if(m['P']==0||m['A']==0||m['T']==0)
            flag=false;
        else {
            if(index_p*(index_t-index_p-1)!=length-index_t-1)
                flag=false;
        }

        if(flag)
            cout<<"YES"<<endl;
        else {
            cout<<"NO"<<endl;
        }
    }

    return 0;
}

PAT1004(结构体的使用与数据读取)

#include<iostream>
using namespace std;


int main()
{
     int number;
    cin>>number;

    struct stu{
        string name;
        string id;
        int grade;
    };

    stu stu1[number];

    for(int i=0;i<number;i++){
        cin>>stu1[i].name>>stu1[i].id>>stu1[i].grade;
    }

    int gradeMax=stu1[0].grade;
    int gradeMin=stu1[0].grade;
    int id_min=0,id_max=0;

    for(int i=1;i<number;i++){
        if(stu1[i].grade<gradeMin){
            gradeMin=stu1[i].grade;
            id_min=i;
        }
        if(stu1[i].grade>=gradeMax){
            gradeMax=stu1[i].grade;
            id_max=i;
        }
    }

    cout<<stu1[id_max].name<<" "<<stu1[id_max].id<<endl;
    cout<<stu1[id_min].name<<" "<<stu1[id_min].id<<endl;

    return 0;
}

PAT1005

#include <iostream>
#include <vector>
#include <algorithm>
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 != 0) n = 3 * n + 1;
            n = n / 2;
            if (arr[n] == 1) break;
            arr[n] = 1;
        }
    }
    sort(v.begin(), v.end(), cmp);
    for (int i = 0; i < (int)v.size(); i++) {
        if (arr[v[i]] == 0) {
            if (flag == 1) cout << " ";
            cout << v[i];
            flag = 1;
        }
    }
    return 0;
}

PAT1006

#include<iostream>

using namespace std;

int main()
{
  int n;
    cin>>n;

    int a[3];

    for(int i=0;i<3;i++){
        a[i]=n%10;
        n=n/10;
    }

    for(int i=0;i<a[2];i++){
        cout<<"B";
    }
    for(int i=0;i<a[1];i++){
        cout<<"S";
    }
    for(int i=0;i<a[0];i++){
        cout<<i+1;
    }

    return 0;
}

PAT1007(质数的判断)

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

    bool judge_PAT1007(int a){
        for(int i=2;i*i<=a;i++){
            if(a%i==0) {
                return false;
            }
        }
        return true;
}
void PAT(){
    int N,cnt=0;
    cin>>N;
    for(int i=5;i<=N;i++){
        if(judge_PAT1007(i-2) && judge_PAT1007(i) )
            cnt++;
    }
    cout<<cnt;
}


int main(){
    PAT();
}



PAT1008(数组元素循环右移,使用vector)

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
  int n,m;
    cin>>n>>m;

    vector<int>a(n);

    for(int i=0;i<n;i++){
        cin>>a[i];
    }

    m=m%n;

    reverse(a.begin(),a.end());
    reverse(a.begin(),a.begin()+m);
    reverse(a.begin()+m,a.end());

    for(int i=0;i<n-1;i++)
        cout<<a[i]<<" ";
    cout<<a[n-1];
    return 0;
}

PAT1009(句子中单词顺序倒置)

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

int i=0;

int main()
{
    vector<string> ss(80);
    string s;

    while(cin>>s)
    {
        ss[i]=s;
        i++;
        if (cin.get() == '\n') break;
    }

   for(int j=i-1;j>0;j--)
      cout<<ss[j]<<" ";
    cout<<ss[0];

    return 0;
}


PAT1010

#include <iostream>
using namespace std;
int main() {
    int a, b, flag = 0;
    while (cin >> a >> b)
    {
        if (b != 0) {
            if (flag == 1) cout << " ";
            cout << a * b << " " << b - 1;
            flag = 1;
        }
        if (cin.get() == '\n') break;
    }
    if (flag == 0) cout << "0 0";
    return 0;
}

PAT1011(int取值范围)

#include <iostream>
using namespace std;
int main() {
    int n;
    cin>>n;
    for (int i = 0; i < n; i++) {
        long long int a, b, c;
        cin>>a>>b>>c;
        printf("Case #%d: %s\n", i + 1, a + b > c ? "true" : "false");
    }
    return 0;
}

PAT1012

#include<iostream>
#include<vector>
#include<iomanip>

using namespace std;

int main()
{
    int n;
    int m;
    cin>>m;
    int A1=0,A2=0,A3=0,A5=0;
    float A4=0;
    int count2=1;
    int count4=0;
    while(cin>>n)
    {
       if(n%10==0)
           A1+=n;
       else if(n%5==1)
       {
           if(count2%2==0)
               A2-=n;
           else
               A2+=n;
           count2++;
       }
       else if(n%5==2)
           A3++;
       else if(n%5==3)
       {
           //cout<<n<<" ";
           A4+=n;
           count4++;
       }
       else if(n%5==4)
           if(A5<n)
               A5=n;

       if(cin.get()=='\n')
           break;
    }
    //cout<<A1<<endl;
   // cout<<A4<<" "<<count4<<endl;
    if(A1==0)
        cout<<"N ";
    else
        cout<<A1<<" ";

    if(A2==0&&count2==1)
        cout<<"N ";
    else
        cout<<A2<<" ";

    if(A3==0)
        cout<<"N ";
    else
        cout<<A3<<" ";

    if(A4==0)
        cout<<"N ";
    else
    {
        A4=A4/count4;
        //cout<<A4;
        cout<<setiosflags(ios::fixed)<<setprecision(1)<<A4<<" ";
    }

    if(A5==0)
        cout<<"N";
    else
        cout<<A5;

    return 0;
}

PAT1013

#include<iostream>
#include<cmath>
#include<vector>

using namespace std;

bool judge(int i)
{
    if(i==1) return false;
    if(i==2) return true;
    for(int j=2;j<sqrt(i)+1;j++)
        if(i%j==0)
            return false;

    return true;
}

int main()
{
    int m,n;
    cin>>m>>n;

    vector<int>a;
    int count=0;

    for(long long int i=1;i<1000000000000000;i++)
    {
        if(judge(i))
        {
            count++;
            if(count>=m)
                a.push_back(i);
        }

        if(count>n-1)
            break;
    }

    int size=a.size();
    int i=0;
    while(i<size)
    {

        for(int j=0;j<9;j++)
        {
            if(i<size)
                cout<<a[i];
            if(i<size-1)
                 cout<<" ";
            i++;
        }
        if(i<size)
            cout<<a[i]<<endl;
        i++;
    }

    return 0;
}

PAT1014

#include <cctype>
#include<iostream>

using namespace std;
int main() {
    string a, b, c, d;
    cin >> a >> b >> c >> d;
    char t[2];
    int pos, i = 0, j = 0;
    while(i < a.length() && i < b.length()) {
        if (a[i] == b[i] && (a[i] >= 'A' && a[i] <= 'G')) {
            t[0] = a[i];
            break;
        }
        i++;
    }
    i = i + 1;
    while (i < a.length() && i < b.length()) {
        if (a[i] == b[i] && ((a[i] >= 'A' && a[i] <= 'N') || isdigit(a[i]))) {
            t[1] = a[i];
            break;
        }
        i++;
    }
    while (j < c.length() && j < d.length()) {
        if (c[j] == d[j] && isalpha(c[j])) {
            pos = j;
            break;
        }
        j++;
    }
    string week[7] = {"MON ", "TUE ", "WED ", "THU ", "FRI ", "SAT ", "SUN "};
    int m = isdigit(t[1]) ? t[1] - '0' : t[1] - 'A' + 10;
    cout << week[t[0]-'A'];
    printf("%02d:%02d", m, pos);
    return 0;
}

PAT1015(sort函数使用)

/*不要看司马光的论述,他将人分四等:圣人,君子,愚人,小人
但是输入的分类中将人分为五等:圣人,君子,愚人,小人,傻子,有一个及格线有点迷糊人*/
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct info{
	char num[10];
	int de_s,cai_s,sum;
	int clas;//等级 
}stu[100010];//这里声明了一个变量stu

bool cmp(info a,info b){
	if(a.clas != b.clas) return a.clas < b.clas;//如果考生档次不同,按照档次从高到低(1~5)排序 
	else if(a.sum != b.sum) return a.sum > b.sum;//如果考生档次相同,按照总分从高到低排序 
	else if(a.de_s != b.de_s) return a.de_s>b.de_s;//如果考生分数相同,按照德行分从高到低排序 
	else return strcmp(a.num,b.num)<0;//如果德行分相同,按照考生号排序。 
}

int main()
{
	int N,L,H;
	scanf("%d%d%d",&N,&L,&H);
	int cnt = N;
	for(int i=0;i<N;i++)
	{
		scanf("%s %d %d",&stu[i].num,&stu[i].de_s,&stu[i].cai_s);
		stu[i].sum = stu[i].de_s+stu[i].cai_s;
		//德才兼亡,且无法及格 
		if(stu[i].de_s < L||stu[i].cai_s < L) {stu[i].clas = 5;cnt--;}
		//德才全尽 
		else if(stu[i].de_s >= H && stu[i].cai_s >= H) stu[i].clas = 1;
		//德胜才 
		else if(stu[i].de_s >= H && stu[i].cai_s < H) stu[i].clas = 2;
		//德才兼亡但尚有德胜才者 
		else if(stu[i].de_s < H && stu[i].cai_s <H && stu[i].de_s>=stu[i].cai_s) stu[i].clas = 3;
		//德才兼亡但才胜德 
		else stu[i].clas = 4;
	}
	sort(stu,stu+N,cmp);
	printf("%d\n",cnt);
	for(int i=0;i<cnt;i++)
	{
		printf("%s %d %d\n",stu[i].num,stu[i].de_s,stu[i].cai_s);
	}
	return 0;
}

PAT1016

#include <iostream>
#include <string>

using namespace std;

int main() {

    int a,c;
    int b,d;
    cin>>a>>b>>c>>d;

//    cout<<b<<endl;
    string aStr= to_string(a);
//    string bStr= to_string(b);
    string cStr= to_string(c);
//    string dStr= to_string(d);

    int aLength=aStr.length();
    int num1=0;
    for(int i=0;i<aLength;i++){


        if((char)aStr[i]-'0'==b){

            num1=num1*10+b;
        }
    }
//    cout<<(int)num1<<endl;
    int cLength=cStr.length();
    int num2=0;
    for(int i=0;i<cLength;i++){


        if((char)cStr[i]-'0'==d){

            num2=num2*10+d;
        }
    }

    cout<<(int)num1+(int)num2;

    return 0;
}

PAT1017(手动除法)

#include<iostream>
#include <string>

using namespace  std;

int main(){


    string s;
    int b;

    cin>>s>>b;
    int length=s.length();
    int t=0;
    int tmp=0;

    t=(s[0]-'0')/b;
    if((t!=0&&length>1)||length==1){
        cout<<t;
    }

    tmp=(s[0]-'0')%b;
    for(int i=1;i<length;i++){
        t=(tmp*10+s[i]-'0')/b;
        cout<<t;
        tmp=(tmp*10+s[i]-'0')%b;
    }

    cout<<" "<<tmp;

    return 0;
}

PAT1018

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int jiawin = 0, yiwin = 0;
    int jia[3] = {0}, yi[3] = {0};
    for (int i = 0; i < n; i++) {
        char s, t;
        cin >> s >> t;
        if (s == 'B' && t == 'C') {
            jiawin++;
            jia[0]++;
        } else if (s == 'B' && t == 'J') {
            yiwin++;
            yi[2]++;
        } else if (s == 'C' && t == 'B') {
            yiwin++;
            yi[0]++;
        } else if (s == 'C' && t == 'J') {
            jiawin++;
            jia[1]++;
        } else if (s == 'J' && t == 'B') {
            jiawin++;
            jia[2]++;
        } else if (s == 'J' && t == 'C') {
            yiwin++;
            yi[1]++;
        }
    }
    cout << jiawin << " " << n - jiawin - yiwin << " " << yiwin << endl << yiwin << " " << n - jiawin - yiwin << " " << jiawin << endl;
    int maxjia = jia[0] >= jia[1] ? 0 : 1;
    maxjia = jia[maxjia] >= jia[2] ? maxjia : 2;
    int maxyi = yi[0] >= yi[1] ? 0 : 1;
    maxyi = yi[maxyi] >= yi[2] ? maxyi : 2;
    char str[4] = {"BCJ"};
    cout << str[maxjia] << " " << str[maxyi];
    return 0;
}

PAT1019(字符串排序,字符串转数字)

#include <iostream>
#include <algorithm>

using namespace std;

bool cmp(char a, char b) { return a > b; }

int main() {
    string s;
    cin >> s;
    s.insert(0, 4 - s.length(), '0');
    do {
        string a = s, b = s;
        sort(a.begin(), a.end(), cmp);
        sort(b.begin(), b.end());
        //cout << "sort: " << s << " " << a << " " << b << endl;
        int result = stoi(a) - stoi(b);
        s = to_string(result);
        s.insert(0, 4 - s.length(), '0');
        cout << a << " - " << b << " = " << s << endl;
    } while (s != "6174" && s != "0000");


    return 0;
}

PAT1020(浮点数保留小数)

#include <iostream>
#include <iomanip>
#include <algorithm>

using namespace  std;

struct goods{
    int id;
    double store;
    double totalPrice;
    double unitPrice;
};
bool cmp(goods kind1,goods kind2){
    return kind1.unitPrice>kind2.unitPrice;
}

int main(){



    int type,demand;
   cin>>type>>demand;
   goods goods[type];
   for(int i=0;i<type;i++){
       goods[i].id=i;
       cin>>goods[i].store;
   }
    for(int i=0;i<type;i++){

        cin>>goods[i].totalPrice;
        goods[i].unitPrice=goods[i].totalPrice/goods[i].store;
    }
    sort(goods,goods+type,cmp);

    double saleVolume=0;
    int i=0;
    while(demand>0&&i<type){

        if(demand>goods[i].store){
            saleVolume+=goods[i].totalPrice;
            demand-=goods[i].store;
        }else{
            saleVolume+=goods[i].unitPrice*demand;
            demand=0;
        }
        i++;
    }
//    printf("%.2f\n",saleVolume);


    cout<<setiosflags(ios::fixed)<<setprecision(2)<<saleVolume<<endl;
  
return 0;

}

PAT1021

#include <iostream>
using namespace std;
int main() {
    string s;
    cin >> s;
    int a[10] = {0};
    for (int i = 0; i < s.length(); i++)
        a[s[i] - '0']++;
    for (int i = 0; i < 10; i++) {
        if (a[i] != 0) 
            printf("%d:%d\n", i, a[i]);
    }
    return 0;
}

PAT1022(进制转换)

#include <iostream>
using namespace std;
int main() {
    int a, b, d;
    cin >> a >> b >> d;
    int t = a + b;
    if (t == 0) {
        cout << 0;
        return 0;
    }
    int s[100];
    int i = 0;
    while (t != 0) {
        s[i++] = t % d;
//        cout<<t%d<<" "<<t/d<<endl;
        t = t / d;
    }
    for (int j = i - 1; j >= 0; j--)
        cout << s[j];
    return 0;
}

PAT1023

#include <iostream>
using namespace std;
int main() {
    int a[10]={0}, t=0;
    for (int i = 0; i < 10; i++)
        cin >> a[i];
    for (int i = 1; i < 10; i++) {
        if (a[i] != 0) {
            cout << i;
            t = i;
            break;
        }
    }
    for (int i = 0; i < a[0]; i++) cout << 0;
    for (int i = 0; i < a[t] - 1; i++) cout << t;
    for (int i = t + 1; i < 10; i++)
        for (int k = 0; k < a[i]; k++)
            cout << i;
    return 0;
}

PAT1024(科学计数法–字符串分解)

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

int main(){
    string s;
    cin>>s;

    int i=0;
    while(s[i]!='E')
        i++;

    string t=s.substr(1,i-1);
    int n= stoi(s.substr(i+1));
//    cout<<"n:"<<n<<"  t: "<<t<<endl;

    if(s[0]=='-')
        cout<<"-";

    if(n<0){
        cout<<"0.";

        for(int j=0;j< abs(n)-1;j++)
            cout<<"0";

        for(int j=0;j<(int)t.length();j++){
            if(t[j]!='.')
                cout<<t[j];
        }
    } else{
        cout<<t[0];
        int j=2,cnt=0;
        for(;j<(int)t.length()&&cnt<n;j++,cnt++){
            cout<<t[j];
        }
        if(j==(int)t.length()){
            for(int k=0;k<n-cnt;k++){
                cout<<'0';
            }
        }else{
            cout<<'.';
            for(int k=j;k<(int)t.length();k++)
            {
                cout<<t[k];
            }
        }
    }
    return 0;
}

PAT1025(翻转链表-TODO: 使用node结构进行实现链表的翻转)

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    /*
     * 使用了一些技巧,没有使用node的定义结构
     * TODO: 使用node结构进行实现链表的翻转
     */
    int first, k, n, temp;
    cin >> first >> n >> k;
    //first represents the first node's address
    int data[100005], next[100005], list[100005]; //node structure

    for (int i = 0; i < n; i++) {  //get all nodes
        cin >> temp ;
        cin>>data[temp] >> next[temp];
    }

    int sum = 0;//不一定所有的输入的结点都是有用的,加个计数器

    while (first != -1) { //遍历一次,确定有效节点的个数
        list[sum++] = first;
        first = next[first];
    }

    for (int i = 0; i < (sum - sum % k); i += k)
        reverse(begin(list) + i, begin(list) + i + k);//flip the nodes every E nodes

    for (int i = 0; i < sum - 1; i++)
        printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]); //print

    printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);
    return 0;
}

PAT1026


PAT1027


PAT1028


PAT1029


PAT1030


PAT1031


PAT1032


PAT1033


PAT1034


PAT1035


PAT1036


PAT1037


PAT1038


PAT1039


PAT1040


PAT1041


PAT1042


PAT1043


PAT1044


PAT1045


PAT1046


PAT1047


PAT1048


PAT1049


PAT1050


PAT1051


PAT1052


PAT1053


PAT1054


PAT1055


PAT1056


PAT1057


PAT1058


PAT1059


PAT1060


PAT1061


PAT1062


PAT1063


PAT1064


PAT1065


PAT1066


PAT1067


PAT1068


PAT1069


PAT1070


PAT1071


PAT1072


PAT1073


PAT1074


PAT1075


PAT1076


PAT1077


PAT1078


PAT1079


PAT1080


PAT1081


PAT1082


PAT1083


PAT1084


PAT1085


PAT1086


PAT1087


PAT1088


PAT1089


PAT1090


PAT1091


PAT1092


PAT1093


PAT1094


PAT1095


PAT1096


PAT1097


PAT1098


PAT1099


PAT1100


PAT1101


PAT1102


PAT1103


PAT1104


PAT1105


PAT1106


PAT1107


PAT1108


PAT1109


PAT1110


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PAT乙级1009题是一个关于字符串处理的题目。根据题目要求,我们需要将输入的字符串按照单词的逆序输出。根据提供的引用内容,我们可以看到有三种不同的解法。 引用\[1\]和引用\[2\]是两个相似的解法,使用了字符串处理函数strchr和strrchr来定位空格字符,并将字符串分割成单词。然后通过循环输出单词,最后输出剩余的最后一个单词。 引用\[3\]是另一种解法,使用了二维数组来存储每个单词。通过循环读取输入的字符串,直到遇到换行符为止。然后通过倒序循环输出每个单词。 根据题目要求,你可以选择其中一种解法来完成PAT乙级1009题。 #### 引用[.reference_title] - *1* [PAT考试乙级1009(C语言实现)](https://blog.csdn.net/JeffreyDDD/article/details/78395267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PAT乙级1009(C语言实现)](https://blog.csdn.net/weixin_62870950/article/details/124934829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [PAT乙级测试题1009(C语言实现)](https://blog.csdn.net/weixin_45947840/article/details/105943475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值