PAT乙级1058 选择题 (20 分)

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1058 选择题 (20 分)相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
题目地址

#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct node
{
	int score;
	int sum;
	int k;
	char s[10];
}Node[1005]; //正确答案 
int n,m;
int cnt[1005];//错误个数 
int sum[1005];//总的分数 
int main(void)
{
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		cin>>Node[i].score;
		cin>>Node[i].sum;
		cin>>Node[i].k;
		for(int j=0;j<Node[i].k;j++) cin>>Node[i].s[j];
	}
	string temp; getline(cin,temp);
	for(int i=0;i<n;i++)
	{
		getline(cin,temp);
		int t=0;
		string c;
		for(int j=0;j<temp.size();j++) 
		{
			if(temp[j]>='a'&&temp[j]<='z') c+=temp[j];
			if(temp[j]==')') 
			{
				int flag=0;
				for(int x=0;x<c.size();x++)
				{
					for(int y=0;y<Node[t].k;y++)
					{
						if(c[x]==Node[t].s[y]) flag++;
					}
				}
				if(flag==Node[t].k&&flag==c.size()) sum[i]+=Node[t].score;
				else cnt[t]++;
				c.clear();
				t++;
			}
		}
	}
	for(int i=0;i<n;i++) cout<<sum[i]<<endl;
	int ans=0;
	for(int i=0;i<m;i++) if(cnt[ans]<cnt[i]) ans=i;
	if(cnt[ans])
	{
		cout<<cnt[ans];
		for(int i=0;i<m;i++) if(cnt[ans]==cnt[i]) cout<<" "<<i+1;
    	cout<<endl;
    }
    else cout<<"Too simple"<<endl;
	return 0;
}
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
struct node
{
	string s;
	int score;
}S[105];
int n,k;
int sum[1005];
int cnt[105];
bool check(string s,int m)
{
	int k=0;
	for(int i=0;i<s.size();i++)
	{
		if(S[m].s.find(s[i])==-1) return false;
		k++;
	}
	return k==S[m].s.size();
}
int main(void)
{
	cin>>n>>k;
	for(int i=0;i<k;i++)
	{
		int a,t;
		cin>>S[i].score>>a>>t;
		for(int j=0;j<t;j++)
		{
			string x; cin>>x;
			S[i].s+=x; 
		}
	}
	string s; getline(cin,s);
	for(int i=0;i<n;i++)
	{
		getline(cin,s);
		int m=0;
		for(int j=0;j<s.size();j++)
		{
			string temp;
			while(s[j]!=')')
			{
				if(s[j]>='a'&&s[j]<='z') temp+=s[j];
				j++;
			}
			if(check(temp,m)) sum[i]+=S[m].score;
			else cnt[m]++;
			m++;
		}
	}
	for(int i=0;i<n;i++) cout<<sum[i]<<endl;
	int ans=0;
	for(int i=0;i<k;i++) if(ans<cnt[i]) ans=cnt[i];
    if(ans!=0)
    {
        cout<<ans;
	    for(int i=0;i<k;i++)
	    {
		    if(ans==cnt[i]) cout<<" "<<i+1; 
	    }
    }
    else cout<<"Too simple"<<endl;
	return 0;
}

以上是关于PAT乙级1058 选择题 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)

pat 1058 A+B in Hogwarts(20 分)

PAT 甲级 1058 A+B in Hogwarts (20 分) (简单题)

JAVA1004 成绩排名 (20分) PAT乙级 PAT (Basic Level) Practice(中文)

PAT乙级1088-----三人行 (20分)

JAVA1003 我要通过!(20分) PAT乙级 PAT (Basic Level)Practice (中文)