PAT乙级2021秋季题解

PAT乙级2021秋季题解

7-1 好数

原题

PAT乙级2021秋季题解_第1张图片

算法标签 模拟 排序 结构体

代码

#include
#define int long long
using namespace std;
const int N = 100005;
struct MN{
    int nm;
    int a;
    int b;
}mn[N];
bool cmp(MN A, MN B){
    return A.nm>n;
    while(n--){
        int num;
        int k=0;
        cin>>num;
        bool flag=false;
        for(int i=1;i<=100;++i){
            for(int j=i+1;j<=100;++j){
                if(i*i+i*j+j*j==num){
                    if(!flag){
                        flag = true;
                        cout<<"Yes"<<"\n";
                    }
                    cout<0){
                        mn[k].nm=i*i+i*j+j*j;
                        mn[k].a=i;
                        mn[k].b=j;
                        k++;
                    }
                }
            }
        }
        sort(mn,mn+k, cmp);
        if(!flag){
            cout<<"No"<<" "<

7-2 数以类聚

原题

PAT乙级2021秋季题解_第2张图片

算法标签 模拟 哈希

代码

#include
#define int long long
#define x first
#define y second
using namespace std;
const int N = 100005;
map mp;
int mul(int num){
    int sum=1;
    while(num){
        int n=num%10;
        sum*=n;
        num/=10;
    }
    return sum;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    for(int i=0;i>num;
        mp[mul(num)]++;
    }
    int mx=0,mxidx=0;
    for(auto mmp:mp){
        if(mmp.y>mx){
            mxidx = mmp.x;
            mx = mmp.y;
        }
    }
    cout<

7-3 自定义判题程序

原题

PAT乙级2021秋季题解_第3张图片
PAT乙级2021秋季题解_第4张图片
PAT乙级2021秋季题解_第5张图片

算法标签 模拟

代码

#include
#define int long long
#define x first
#define y second
using namespace std;
const int N = 100005;
bool solve(int k, string s, string s1, string s2){
    int cnt=0;
    string t="";
    for(int i=0;ik){
               return false;
           }
        }
        if(s[i]==' '){
            return false;
        }
        if(s2[i]-'0'==0){
            t.push_back(s1[i]);
        }
        if(s2[i]-'0'==2){
            t+="*";
        }
        if(s2[i]-'0'==3){
            t+="*";
            t.push_back(s1[i]);
            t+="*";
        }
    }
    for(int i=0;i>n;
    while(n--){
        int k;
        string s2;
        cin>>k>>s2;
        bool res=solve(k,s, s1, s2);
        
        if(res){
            cout<<"AC"<<"\n";
        }
        else{
            cout<<"WA"<<"\n";
        }
        
    }
    return 0;
    
}

这道题细节蛮多, 代码也存在问题

7-4 数组与链表

原题

PAT乙级2021秋季题解_第6张图片
PAT乙级2021秋季题解_第7张图片

算法标签 前缀和 模拟

代码

#include
#define int long long
using namespace std;
const int N = 10005; 
int b[N],l[N],a[N];
map mp;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,k;
    cin>>n>>k;
    for(int i=0;i>b[i]>>l[i];
    }
    a[0]=l[0];
    for(int i=1;i>num;
        int t=-1;
        for(int i=0;inum){
                t=i;
                break;
            }
        }
        if(t==-1){
            cout<<"Illegal Access"<<"\n";
        }
        else{
            mp[t]++;
            cout<

7-5取帽子

原题链接

PAT乙级2021秋季题解_第8张图片
PAT乙级2021秋季题解_第9张图片

算法标签 模拟 排序 结构体

代码

#include
#include
#include
#include

using namespace std;

int main(){

	int n; cin >> n;
	vector hat, sorthat;
	vector wei, sortwei;
	for (int i = 0; i < n; i++){
		int hat_; cin >> hat_;
		hat.push_back(hat_);
		sorthat.push_back(hat_);
	}
	sort(sorthat.begin(), sorthat.end());

	for (int i = 0; i < n; i++){
		int wei_; cin >> wei_;
		wei.push_back(wei_);
		sortwei.push_back(wei_);
	}
	sort(sortwei.begin(), sortwei.end());

	for (int i = n - 1; i >= 0; i--){
		int pos = lower_bound(sorthat.begin(), sorthat.end(), hat[i]) - sorthat.begin();
		for (int j = 0; j < n; j++){
			if (wei[j] == sortwei[pos]){
				if(i == 0) cout << j + 1;
				else cout << j + 1 << ' ';
				break;
			}
		}
	}

	return 0;
}

上述代码对于测试样例无问题(除第三题),可能存在bug, 遇到问题欢迎一起交流沟通哈。
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
请添加图片描述

你可能感兴趣的:(PAT乙级考试题解,c++,算法,数据结构)