7-87 检查密码 (15分)
题意:就是根据给的字符串判断,进行输出。
题解:就是根据字符串的遍历找到是否有数字或者字母进行标记,特别主要要特判都是点的情况,需要输出完美。
代码:
#include<iostream> using namespace std; int main() { int n; cin>>n; string s; getchar(); int tag1=0,tag2=0,tag3=0,tag4=0; while(n--){ getline(cin,s); if(s.length()<6){ cout<<"Your password is tai duan le."<<endl; }else { for(int i=0;i<s.length();i++){ if(s[i]>='0'&&s[i]<='9'){ tag1=1; } else if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){ tag2=1; } else if(s[i]=='.'){ tag3=1; } else{ tag4=1; } } if(tag4==1){ cout<<"Your password is tai luan le."<<endl; }else if(tag2==1&&tag1==0){ cout<<"Your password needs shu zi."<<endl; }else if(tag1==1&&tag2==0){ cout<<"Your password needs zi mu."<<endl; } else{ cout<<"Your password is wan mei."<<endl; } } tag1=0,tag2=0,tag3=0,tag4=0; } return 0; }
7-9 关于堆的判断 (25分)
题意:给定序列和输入判断是对的还是错的。
题解:主要难点是小顶堆的建立,只要把小顶堆建立好了,然后还要知道树的定义a[k]的左子树是a[k/2]右子树是a[k/2+1],再根据输入的字符串判断条件即可。
代码:
#include <iostream> using namespace std; const int MAX = 1002; int a[MAX]; int n,m; int find(int x){ for (int i = 1; i <= n;i++){ if(a[i]==x) return i; } return 0; } int main(){ cin >> n >> m; for (int i = 1; i <= n;i++){ cin >> a[i]; int k=i; while(k>1&&a[k]<a[k/2]){//小顶堆的概念,建立小顶堆 swap(a[k],a[k/2]); k/=2; } } // for(int i=1;i<=n;i++){ // cout<<a[i]; // } while(m--){//判断 int x; cin >> x; string s; cin >> s; if(s=="is"){ string ss; cin >> ss; if(ss=="the"){ string sss; cin >> sss; if(sss=="root"){ if(a[1]==x) cout << "T" << endl; else cout << "F" <<endl; } else{ string s1; int xx; cin >> s1 >> xx; if(find(x)==find(xx)/2) cout << "T" << endl; else cout << "F" << endl; } } else if(ss=="a"){ string s1,s2; int xx; cin >> s1 >> s2 >> xx; if(find(x)/2==find(xx)) cout << "T" << endl; else cout << "F" << endl; } } else if(s=="and"){ int xx; string s1,s2; cin >> xx >> s1 >> s2; if(find(x)/2==find(xx)/2) cout << "T" << endl; else cout << "F" << endl; } } return 0; }