HJ81~HJ90 华为机试题库
HJ82 将真分数分解为埃及分数
题目:https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b?tpId=37&tqId=21305&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
注意到埃及分数的定义
于是…………我有一个主意◔ ‸◔?
直接把x/y拆分成x个1/y……23333333还真行
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 char c=getchar(); 5 int x=0,y=0; 6 while(c!='/'){ 7 x=x*10+c-'0'; 8 c=getchar(); 9 } 10 c=getchar(); 11 while(c>='0'&&c<='9'){ 12 y=y*10+c-'0'; 13 c=getchar(); 14 } 15 for(int i=1;i<x;i++)cout<<"1/"<<y<<"+"; 16 cout<<"1/"<<y; 17 }
HJ85 最长回文子串
题目:https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507?tpId=37&tqId=21308&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
拿来练个manacher
1 #include<bits/stdc++.h> 2 using namespace std; 3 string Pretreatment(string s){ 4 string t="^"; 5 for(auto i:s) 6 t=t+"#"+i; 7 t+="#$"; 8 return t; 9 } 10 void Manacher(const string&s){ 11 int r=0,c=0; 12 vector<int>p(s.size()+10); 13 for(int i=0;i<s.size();i++){ 14 int mirr=c*2-i; 15 if(r>i)p[i]=min(p[mirr],r-i); 16 while(s[i+p[i]+1]==s[i-p[i]-1])p[i]++; 17 if(i+p[i]>r){ 18 r=i+p[i]; 19 c=i; 20 } 21 } 22 int ans=0; 23 for(int i=0;i<s.size();i++) 24 ans=max(ans,p[i]); 25 cout<<ans; 26 } 27 int main(){ 28 string s;cin>>s; 29 string t=Pretreatment(s); 30 Manacher(t); 31 }
HJ88 扑克牌大小
题目:https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb?tpId=37&tqId=21311&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 char sp[2][10][10]; 4 int paishu[2],spNum[2][10]; 5 void init(){ 6 char c=getchar(); 7 while(c!='-'){ 8 paishu[0]++; 9 int len=0; 10 if(c==' ')c=getchar(); 11 while(c!=' '&&c!='-'){ 12 sp[0][paishu[0]][len++]=c; 13 c=getchar(); 14 } 15 } 16 while(c!='\n'){ 17 paishu[1]++; 18 int len=0; 19 c=getchar(); 20 while(c!=' '&&c!='\n'){ 21 sp[1][paishu[1]][len++]=c; 22 // if(paishu[1]==2&&len==6) printf("%c %d\n",c,len); 23 c=getchar(); 24 // if(c==EOF&&paishu[1]==2&&len==6) printf("%c %d\n",c,len); 25 } 26 } 27 return; 28 } 29 void WorkspNum(){ 30 for(int i=0;i<2;i++){ 31 for(int j=1;j<=paishu[i];j++){ 32 int len=strlen(sp[i][j]); 33 // if(i==1&&j==2)printf("%d\n",len); 34 if(len==5){ 35 if(sp[i][j][0]=='j')spNum[i][j]=99; 36 else spNum[i][j]=100; 37 } 38 if(len==2) spNum[i][j]=10; 39 if(len==1){ 40 char c=sp[i][j][0]; 41 if(c>='3'&&c<='9') spNum[i][j]=c-'3'+3; 42 if(c=='J') spNum[i][j]=11; 43 if(c=='Q') spNum[i][j]=12; 44 if(c=='K') spNum[i][j]=13; 45 if(c=='A') spNum[i][j]=14; 46 if(c=='2') spNum[i][j]=15; 47 } 48 } 49 } 50 return; 51 } 52 int ZhaDan(int u){ 53 if(spNum[u][1]+spNum[u][2]==199) return 10000; 54 if(paishu[u]==4){ 55 return spNum[u][1]*100; 56 } 57 return -1; 58 } 59 int Work(){ 60 if(paishu[0]==1||paishu[0]==3||paishu[0]==5){ 61 if(paishu[1]==paishu[0]){ 62 if(spNum[0][1]>spNum[1][1]) return 0; 63 else return 1; 64 } 65 else{ 66 if(ZhaDan(1)>0) return 1; 67 else return -1; 68 } 69 } 70 if(paishu[0]==2){ 71 if(ZhaDan(0)>0) return 0; 72 if(paishu[1]!=2){ 73 if(ZhaDan(1)>0) return 1; 74 } 75 else{ 76 if(ZhaDan(1)>0) return 1; 77 if(spNum[0][1]>spNum[1][1])return 0; 78 else return 1; 79 } 80 } 81 if(paishu[0]==4){ 82 // printf("%s\n",sp[1][2]); 83 if(ZhaDan(0)>ZhaDan(1)) return 0; 84 else return 1; 85 } 86 return -1; 87 } 88 void Win(int x){ 89 if(x==0||x==1){ 90 for(int i=1;i<=paishu[x];i++) 91 printf("%s ",sp[x][i]); 92 exit(0); 93 } 94 printf("ERROR"); 95 exit(0); 96 return; 97 } 98 int main(){ 99 init(); 100 WorkspNum(); 101 int ans=Work(); 102 if(ans==0) Win(0); 103 else if(ans==1) Win(1); 104 else Win(-1); 105 return 0; 106 }
HJ89 24点运算
题目:https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d?tpId=37&tqId=21312&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
1 #include<bits/stdc++.h> 2 using namespace std; 3 char fuhao[5]; 4 int id[10]; 5 bool book[10]; 6 struct Pai{ 7 int num; 8 char s[10]; 9 }pai[5]; 10 void init(){ 11 for(int i=1;i<=4;i++) 12 scanf("%s",pai[i].s); 13 for(int i=1;i<=4;i++){ 14 int len=strlen(pai[i].s); 15 char c=pai[i].s[0]; 16 if(len==1){ 17 if(c>='2'&&c<='9')pai[i].num=c-'2'+2; 18 else if(c=='J') pai[i].num=11; 19 else if(c=='Q') pai[i].num=12; 20 else if(c=='K') pai[i].num=13; 21 else if(c=='A') pai[i].num=1; 22 } 23 if(len==2) pai[i].num=10; 24 if(len==5){ 25 puts("ERROR"); 26 exit(0); 27 } 28 } 29 return; 30 } 31 void Output(){ 32 printf("%s",pai[id[1]].s); 33 for(int i=2;i<=4;i++){ 34 printf("%c",fuhao[i]); 35 printf("%s",pai[id[i]].s); 36 } 37 exit(0); 38 return; 39 } 40 void Dfs(int top,int nowsum){ 41 if(top>4){ 42 if(nowsum==24){ 43 Output(); 44 return; 45 } 46 return; 47 } 48 fuhao[top]='+'; 49 Dfs(top+1,nowsum+pai[id[top]].num); 50 fuhao[top]='-'; 51 Dfs(top+1,nowsum-pai[id[top]].num); 52 fuhao[top]='*'; 53 Dfs(top+1,nowsum*pai[id[top]].num); 54 fuhao[top]='/'; 55 Dfs(top+1,nowsum/pai[id[top]].num); 56 return; 57 } 58 int main(){ 59 init(); 60 for(int i=1;i<=4;i++)book[i]=1; 61 for(int i=1;i<=4;i++){ 62 book[i]=0; 63 for(int j=1;j<=4;j++){ 64 if(book[j]){ 65 book[j]=0; 66 for(int m=1;m<=4;m++){ 67 if(book[m]){ 68 book[m]=0; 69 for(int n=1;n<=4;n++){ 70 if(book[n]){ 71 id[1]=i; 72 id[2]=j; 73 id[3]=m; 74 id[4]=n; 75 Dfs(2,pai[id[1]].num); 76 } 77 } 78 book[m]=1; 79 } 80 } 81 book[j]=1; 82 } 83 } 84 book[i]=1; 85 } 86 puts("NONE"); 87 return 0; 88 }
HJ90 合法IP
题目:https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9?tpId=37&tqId=21313&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D2%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
细节真的好多,好烦。
1 #include<bits/stdc++.h> 2 using namespace std; 3 bool isdigital(char c){ 4 if(c>='0'&&c<='9')return 1; 5 return 0; 6 } 7 int main(){ 8 string s; 9 while(cin>>s){ 10 bool ans=1; 11 if(s[0]=='.'||s[s.size()-1]=='.')ans=0; 12 int cnt=0; 13 for(int i=0;i<s.size();i++) 14 if(s[i]=='-'||s[i]=='+')ans=0; 15 for(int i=0;i<s.size()-1;i++){ 16 if(s[i]=='.')cnt++; 17 if(s[i]=='.'&&s[i+1]=='.')ans=0; 18 if((i==0&&s[i]=='0'&&isdigital(s[1]))|| 19 (i>0&&s[i-1]=='.'&&s[i]=='0'&&isdigital(s[i+1])))ans=0; 20 } 21 if(cnt!=3)ans=0; 22 if(ans){ 23 int x=0; 24 for(int i=0;i<s.size();i++){ 25 if(isdigital(s[i])) 26 x=x*10+s[i]-'0'; 27 else{ 28 if(x<0||x>255)ans=0; 29 x=0; 30 } 31 } 32 if(x<0||x>255)ans=0; 33 } 34 if(ans==0)puts("NO"); 35 else puts("YES"); 36 } 37 }
by:AlenaNuna