PAT练习(六)

PAT1029B 旧键盘 (20 分)/1084A

https://pintia.cn/problem-sets/994805260223102976/problems/994805292322111488

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
	string a,b;	
	char rs[37];
	int index,num=0;
	cin>>a>>b;
	for(int i=0;i<a.length();i++){
		//当a与b内容不同时 
		if(a[i]!=b[i-num]){
			int flag=0;
			if(a[i]>='0'&&a[i]<='9'){
				for(int j=0;j<index;j++){
					if(rs[j]==a[i]){
						flag=1;
						break;
					}
				}
				if(flag==0){
					rs[index]=a[i];
					index = index+1;					
				}
			}
			else if(a[i]>='a'&&a[i]<='z'){
				char c=a[i]-'a'+'A';
				for(int j=0;j<index;j++){
					if(rs[j]==c){
						flag=1;
						break;
					}
				}
				if(flag==0){
					rs[index]=c;
					index = index+1;					
				}
			}
			else if(a[i]>='A'&&a[i]<='Z'){
				for(int j=0;j<index;j++){
					if(rs[j]==a[i]){
						flag=1;
						break;
					}
				}
				if(flag==0){
					rs[index]=a[i];
					index = index+1;					
				}
			}
			else{
				for(int j=0;j<index;j++){
					if(rs[j]==a[i]){
						flag=1;
						break;
					}
				}
				if(flag==0){
					rs[index]=a[i];
					index = index+1;					
				}
			}
			num =num +1;
		}
	} 
	for(int i=0;i<index;i++){
		cout<<rs[i];
	}
	return 0;
} 

PAT1033B 旧键盘打字 (20 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672
最后一个测试点过不了

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
//a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。
int main(){
	string a,b;
	getline(cin,a);
	getline(cin,b);
	bool flag=false;
	for(int i=0;i<a.length();i++){
		if(a[i]=='+'){
			flag = true;
			break;
			}
		}
	if(flag){
		for(int i=0;i<a.length();i++){
			if(a[i]>='A'&&a[i]<='Z'){
				a[i]=a[i]-'A'+'a';
			}
		}
	}
//	if(flag){
//		for(int i=0;i<a.length();i++){
//			if(a[i]>='A'&&b[i]<='Z'){
//				b[i]=b[i]-'A'+'a';
//			}
//		}
//	}
	for(int i=0;i<b.length();i++){
		char c = b[i];
		bool index=true;
		for(int j=0;j<a.length();j++){
			if(c==a[j]){
				if(c>='a'&&c<='z'){
					index = false;
				}
				else if(c==','||c=='.'||c=='-'||c=='_'){
					index = false;
				}
				else if(c>='0'&&c<='9'){
					index = false;
				}
			}
			else if(c>='A'&&c<='Z'&&flag){
				index =false;
			}
		}
		if(index==true){
			cout<<b[i];
		}
	}
	
	cout<<endl;
	return 0;
}

PAT1038B 统计同成绩学生 (20 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int cnt[110]={0};
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		int index=0;
		cin>>index;
		cnt[index]++;
	}
	int m;
	cin>>m;
	for(int i=0;i<m-1;i++){
		int index=0;
		cin>>index;
		cout<<cnt[index]<<" ";
	}
	int index=0;
	cin>>index;
	cout<<cnt[index];
	
	return 0;
}

PAT1039B 到底买不买 (20 分)/1092A

https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	int rs[62]={0};
	string a,b;
	getline(cin,a);
	getline(cin,b);
	int index=0,n=0;
	bool flag=true; 
	//载入店家手串数据 
	for(int i=0;i<a.length();i++){
		char c=a[i];
		if(c>='0'&&c<='9'){
			rs[c-'0']++;
		}
		else if(c>='A'&&c<='Z'){
			rs[c-'A'+10]++;
		}
		else{
			rs[c-'a'+36]++;
		}
	}
	for(int i=0;i<b.length();i++){
		char c=b[i];
		int m=0;
		if(c>='0'&&c<='9'){
			m=c-'0';
		}
		else if(c>='A'&&c<='Z'){
			m=c-'A'+10;
		}
		else{
			m=c-'a'+36;
		}
		if(rs[m]>0){
			rs[m]--;
			index++;
		}
		else if(rs[m]==0){
			n++;
			flag =false;
		}
	} 
	if(flag==false){
		printf("No %d",n);
	}
	else{
		printf("Yes %d",a.length()-b.length());
	}
	
	return 0;
}

PAT1042B 字符统计 (20 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805280817135616

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
// request for member 'cnt' in 'node', which is of non-class type 'Node [200]'
struct Node{
	char c;
	int cnt=0;
}node[200];
bool cmp(Node a,Node b){
	if(a.cnt!=b.cnt) return a.cnt>b.cnt;
	else return a.c<b.c;
}
int main(){
	string a;
	getline(cin,a);
	int n=0;
	for(int i=0;i<a.length();i++){
		char c1 =a[i];
		if(c1>='A'&&c1<='Z'){
				c1=c1-'A'+'a'; 
			}
		if(c1>='a'&&c1<='z'){
			bool flag=false;
			for(int j=0;j<n;j++){
				if(node[j].c==c1){
					node[j].cnt++;
					flag=true;
				}
			}
			if(flag==false){
				node[n].c=c1;
				node[n].cnt=1;
				n=n+1;
			}			
		}
	} 
	sort(node,node+n,cmp);
	cout<<node[0].c<<" "<<node[0].cnt<<endl;
	return 0;
}

PAT1043B 输出PATest (20 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805280074743808

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
	string str;
	cin>>str;
	int cnt[6]={0};
	int index=0;
	for(int i=0;i<str.length();i++){
		if(str[i]=='P'){
			cnt[0]++;
			index++;
		}
		else if(str[i]=='A'){
			cnt[1]++;
			index++;
		}
		else if(str[i]=='T'){
			cnt[2]++;
			index++;
		}
		else if(str[i]=='e'){
			index++;	
			cnt[3]++;
		}
		else if(str[i]=='s'){
			cnt[4]++;
			index++;
		}
		else if(str[i]=='t'){
			cnt[5]++;
			index++;	
		}
		
	}
	while(1){
		if(cnt[0]>0){
			cout<<'P';
			cnt[0]--;
		}
		if(cnt[1]>0){
			cout<<'A';
			cnt[1]--;
		}
		if(cnt[2]>0){
			cout<<'T';
			cnt[2]--;
		}
		if(cnt[3]>0){
			cout<<'e';
			cnt[3]--;
		}
		if(cnt[4]>0){
			cout<<'s';
			cnt[4]--;
		}
		if(cnt[5]>0){
			cout<<'t';
			cnt[5]--;	
		}
		if(cnt[0]==0&&cnt[1]==0&&cnt[2]==0&&cnt[3]==0&&cnt[4]==0&&cnt[5]==0){
			cout<<endl;
			break;
		}
	}
		
	
	return 0;
} 

PAT1047B 编程团体赛 (20 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805277163896832

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Group{
	int g;
	int score;
}group[1010];
bool cmp(Group a,Group b){
	if(a.score!=b.score) return a.score>b.score;
	else return a.g<b.g;
}
int main(){
	int n=0;
	cin>>n;
	int index=0;
	for(int i=0;i<n;i++){
		int gro,stu,grade;
		scanf("%d-%d %d",&gro,&stu,&grade);
		bool flag=false;
		for(int j=0;j<index;j++){
			if(group[j].g==gro){
				group[j].score+=grade;
				flag=true;
			}
		}
		if(flag==false){
			group[index].g=gro;
			group[index].score=grade;
			index++;
		}
		
	}
	sort(group,group+index,cmp);
	cout<<group[0].g<<" "<<group[0].score;
	return 0;
}

PAT1041A Be Unique (20 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805444361437184
最后两个测试点运行超时

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct N{
	int num;
	int index;
	int cnt;
}node[1010]; 
bool cmp(N a,N b){
	if(a.cnt!=b.cnt) return a.cnt<b.cnt;
	else  return a.index<b.index;
}
int main(){
	int n,m=0;
	cin>>n;
	for(int i=0;i<n;i++){
		int rs;
		bool flag=true;
		cin>>rs;
		for(int j=0;j<m;j++){
			if(node[j].num==rs){
				flag=false;
				node[j].cnt++;
			}
		}
		if(flag){
			node[m].cnt=1;
			node[m].index=i;
			node[m].num=rs;
			m++;
		}
	}
	sort(node,node+m,cmp);
	bool flag=true;
	for(int i=0;i<m;i++){
		if(node[i].cnt==1){
			flag=false;
			cout<<node[i].num;
			break;
		}
	}
	if(flag){
		cout<<"None";
	}
	return 0;
}

修改

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int n,m=0;
	cin>>n;
	int num[100010]={0},key[100010]={0};
	for(int i=0;i<n;i++){
		int index=0;
		cin>>index;
		if(num[index]==0){
			key[m++]=index;
		}
		num[index]++;
	}
	bool flag=true;
	for(int i=0;i<m;i++){
		int index=key[i];
		if(num[index]==1){
			flag=false;
			cout<<index;
			break;
		}
	}
	if(flag){
		cout<<"None";
	}
	return 0;
}

PAT1050A String Subtraction (20 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805429018673152

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;
int main(){
	string a,b;
	bool rs[128]={false};
	getline(cin,a);
	getline(cin,b);
	for(int i=0;i<b.length();i++){
		rs[b[i]]=true;
	}
	for(int i=0;i<a.length();i++){
		if(rs[a[i]]==false){
			cout<<a[i];
		}
	}
	return 0;
}

PAT1005B 继续(3n+1)猜想 (25 分)

https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776

#include<iostream>
#include<algorithm>
#define MAX 101
using namespace std;

bool cmp(int e, int f)
{
	return (e > f);
}


int main() {
	/*输入数据个数*/
	int count;
	cin >> count;
	int num[MAX];
	int cnt = 0;
	/*收集覆盖数字*/
	int var[100001];
	/*关键数字*/
	int key[MAX];
	/*收集全部变量*/
	for (int i = 0; i < count ; i++) {
		cin >> num[i];
	}
	/*将所有变量的覆盖值存储*/
	for (int i = 0; i < count; i++) {
		while (num[i] != 1) {
				if (num[i] % 2 == 0) {
					num[i] = num[i] / 2;
					var[cnt++] = num[i];
				}
				else {
					num[i] = (num[i] * 3 + 1)/2;
					var[cnt++] = num[i];
			}
		}
	}
	/*将在变量数组不再覆盖数组中的数字载入到关键字数组中*/
	int important = 0,imp = 0;
	for (int i = 0; i < count; i++) {
		imp = 1;
		for (int j = 0; j < cnt; j++) {
			if (num[i] == var[j]) {
				imp = 0;
				break;
			}
		}
		/*当该数字不在覆盖数组中*/
		if (imp == 0) {
			key[important++] = num[i];
		}
	}
	/*对关键字数组进行由大到小的排列*/
	sort(key, key + important, cmp);
	/*将数组输出,数字之间间隔一个空格,最后一个后面没有空格*/
	for (int i = 0; i < important - 1; i++) {
		cout << key[i] << " ";
	}
	cout << key[important - 1];
	return 0;
}


PAT1048A Find Coins (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840
测试点1错误,啊啊啊啊,有大神知道是什么数据么

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
	bool num[1010]={false};
	int n=0,sum=0;
	cin>>n>>sum;
	for(int i=0;i<n;i++){ 
		int number;
		cin>>number;
		num[number]=true;
	}
	bool flag=true;
	for(int i=1;i<=1000;i++){
		if(num[i]){
			if(num[sum-i]&&(i<=(sum-i))){
				cout<<i<<" "<<sum-i;
				flag=false;
				break;
			}	
		}
	}
	if(flag){
		cout<<"No Solution";
	}
	return 0;
}
发布了43 篇原创文章 · 获赞 4 · 访问量 6132

猜你喜欢

转载自blog.csdn.net/didadu/article/details/99708344