!L2-028 秀恩爱分得快 - 分块大模拟
PTA | 程序设计类实验辅助教学平台
这个题还是挺考验 函数合理运用 和 数据模拟处理能力 的
思路:
- 因为可能出现-0这种输入 所以不能是int型 stoi() 将字符串转化为整数
- 先把每张照片的人 按照片编号储存
- 因为题目只要求找a和b相关亲密度高的异性 所以和a b都没关系的人可以不用存
- 建立数组love分别存a b和各异性的亲密度 并找出各自亲密度最高的人
- bool ck函数负责判断b是不是a最亲密的人
#include <bits/stdc++.h>
using namespace std;
const int N=1100;
bool sex[N]; //true女 false男
vector<int> p[N];//p[i][]表示第i张照片 后面表示人
int n,m,k;
void print(int a,int b)
{
if(sex[a]) cout<<"-";
cout<<a<<" ";
if(sex[b]) cout<<"-";
cout<<b<<endl;
}
void pr(int a,int idx,double l[])
{
for(int i=0;i<n;i++)
if(l[idx]==l[i]) print(a,i);
}
//找a亲密度最高的异性 返回值为判断b是否为a亲密度最高的人
bool ck(int a,int b,int &idx,double l[])
{
//从每一张照片开始找起
for(int i=0;i<m;i++)
{
//先判断照片里有没有a
int len=p[i].size();
int j;
for(j=0;j<len;j++) if(p[i][j]==a) break;
if(j>=len) continue; //如果这张照片没有a 则下一张
for(int j=0;j<len;j++)
if(sex[p[i][j]]^sex[a]) l[p[i][j]]+=1.0/len;
}
double maxx=-1;
for(int i=0;i<n;i++)
if(maxx<l[i])
{
maxx=l[i];
idx=i;
}
return l[idx]==l[b];
}
int main()
{
cin>>n>>m;
//因为会出现-0的情况 所以只能用string 将字符串转化为整数
string s;
for(int i=0;i<m;i++)
{
cin>>k;
for(int j=0;j<k;j++)
{
cin>>s;
int x=abs(stoi(s));
if(s[0]=='-') sex[x]=true;
p[i].push_back(x);
}
}
int a,b;
cin>>s;
a=abs(stoi(s));
if(s[0]=='-') sex[a]=true;
cin>>s;
b=abs(stoi(s));
if(s[0]=='-') sex[b]=true;
double la[N]={0},lb[N]={0}; //la存a和异性的亲密度 lb存b和异性亲密度
int idxa,idxb; //idxa记录a最亲密的人的编号 idxb记录b最亲密的人的编号
bool love1=ck(a,b,idxa,la);
bool love2=ck(b,a,idxb,lb);
if(love1&&love2) print(a,b);
else
{
pr(a,idxa,la);
pr(b,idxb,lb);
}
}
L1-064 估值一亿的AI核心代码 - 20 - java 正则表达式
PTA | 程序设计类实验辅助教学平台
java正则表达式
L1-064 估值一亿的AI核心代码 (20分)(Java正则表达式)_信小颜的博客-CSDN博客_cstr=cstr.trim();
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String s;
int n=sc.nextInt();
String t=sc.nextLine();
while(n-->0)
{
String res="";
s=sc.nextLine();
System.out.println(s);
for(char c:s.toCharArray())//所有大写英文字母变成小写,除了I
{
if(c>='A'&&c<='Z'&&c!='I')
c+=32;
res+=c;
}
res=res.trim(); //去掉首尾多余空格
res=res.replaceAll(" +"," "); //" +"表示一个或多个空格替换成一个空格
res=res.replaceAll(" (\\W)","$1"); //去掉标点符号前面的空格。标点符号默认为除了大小写英文字母和数字和下划线之外的符号。\W就是与任何非单词字符匹配
res=res.replaceAll("\\?","!"); //将所有?替换为!
res=res.replaceAll("\\bcan you\\b","A");//如果can you两边是非字的(即要么是空格要么是除了大小写字母和数字和下划线)就替换成A
res=res.replaceAll("\\bcould you\\b","B");
res=res.replaceAll("\\b(I|me)\\b","C");//如果是独立的I或者me就替换成C
res=res.replaceAll("A","I can");
res=res.replaceAll("B","I could");
res=res.replaceAll("C","you");
System.out.println("AI: "+res);
}
}
}
L1-062 幸运彩票 - 15
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
while(n--)
{
int s1=0,s2=0,cnt=0;
cin>>s;
string str1=s.substr(0,3);
string str2=s.substr(3);
while(cnt<3)
{
s1+=(str1[cnt++]-'0');
}
cnt=0;
while(cnt<3)
{
s2+=(str2[cnt++]-'0');
}
if(s1==s2) cout<<"You are lucky!"<<endl;
else cout<<"Wish you good luck."<<endl;
}
}
L1-063 吃鱼还是吃肉 - 10
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int sex,h,w;
cin>>sex>>h>>w;
if(sex==0)
{
if(h==129) cout<<"wan mei! ";
else if(h>129) cout<<"ni li hai! ";
else cout<<"duo chi yu! ";
if(w==25) cout<<"wan mei!";
else if(w>25) cout<<"shao chi rou!";
else cout<<"duo chi rou!";
}else
{
if(h==130) cout<<"wan mei! ";
else if(h>130) cout<<"ni li hai! ";
else cout<<"duo chi yu! ";
if(w==27) cout<<"wan mei!";
else if(w>27) cout<<"shao chi rou!";
else cout<<"duo chi rou!";
}
cout<<endl;
}
}