/* 合唱队 #include <stdio.h> int main() { int n; int i,j; int a[100]; int f1[100];//存放合唱队的人数(从左向右) int f2[100];//存放合唱队的人数(从右向左) int ans = 0; //cin>>n; scanf("%d",&n); for(i=1;i<=n;i++)//第0个位置不存放数据,符合平常的思维习惯。 //cin>>a[i]; scanf("%d",&a[i]); for(i=1;i<=n;i++)//由左向右依次遍历 { f1[i] = 1;//至少有一个人符合条件,就是他自己。所以赋初值1. for(j=1;j<i;j++) { if(a[i]>a[j]&&f1[i]<f1[j]+1) //f1[i]<f1[j]+1很关键的条件,动态问题 f1[i]= f1[j]+1; } } for(i=n;i>=1;i--)//由右向左依次遍历 { f2[i] = 1;//至少有一个人符合条件,就是他自己。所以赋初值1. for (j=i+1;j<=n;j++) { if(a[i]>a[j]&&f2[i]<f2[j]+1) f2[i]=f2[j]+1; } } for(i=1;i<=n;i++) if(ans<f1[i]+f2[i]-1) ans=f1[i]+f2[i]-1;//最佳解 //cout<<n-ans<<endl;//需要出列的人数 printf("%d",n-ans); return 0; } */ /* 坐标移动 #include <iostream> using namespace std; void main() { int x=0,y=0; int i,j,k; char a[100],b[30][5]; j=0; k=0; gets(a); for (i=0;i<strlen(a);i++) { if (a[i] != ';') { b[j][k] = a[i]; k++; } else { b[j][k]=' '; j++; k=0; } } for (i=0;i<j;i++) { k=strlen(b[i]); if (k==2) { if (b[i][0]=='A'&& (b[i][1]>='0'&&b[i][1]<='9')) { x = x-(b[i][1]-'0'); } if (b[i][0]=='D'&& (b[i][1]>='0'&&b[i][1]<='9')) { x = x+(b[i][1]-'0'); } if (b[i][0]=='W'&& (b[i][1]>='0'&&b[i][1]<='9')) { y = y+(b[i][1]-'0'); } if (b[i][0]=='S'&& (b[i][1]>='0'&&b[i][1]<='9')) { y = y-(b[i][1]-'0'); } } else if(k==3) { if (b[i][0]=='A'&& (b[i][1]>='0'&&b[i][1]<='9')&&(b[i][2]>='0'&&b[i][2]<='9')) { x = x-((b[i][1]-'0')*10+b[i][2]-'0'); } if (b[i][0]=='D'&& (b[i][1]>='0'&&b[i][1]<='9')&&(b[i][2]>='0'&&b[i][2]<='9')) { x = x+((b[i][1]-'0')*10+b[i][2]-'0'); } if (b[i][0]=='W'&& (b[i][1]>='0'&&b[i][1]<='9')&&(b[i][2]>='0'&&b[i][2]<='9')) { y = y+((b[i][1]-'0')*10+b[i][2]-'0'); } if (b[i][0]=='S'&& (b[i][1]>='0'&&b[i][1]<='9')&&(b[i][2]>='0'&&b[i][2]<='9')) { y = y-((b[i][1]-'0')*10+b[i][2]-'0'); } } } cout<<x<<","<<y<<endl; } */ /* 报数 #include <iostream> using namespace std; struct Node { int Data; Node *next; }; class list { public: Node *head; list() {head = NULL;} void InsertNode(int a); }; void list::InsertNode(int a) { Node *p,*s,*q; s = (Node *)new(Node); s->Data = a; p = head; q = head; if (p == NULL) { head = s; s->next = s; } else { while (q->next!=p) { q = q->next; } q->next = s; s->next = p; } } void main() { int n,i; char s; list slist; Node *p,*q; do { scanf("%d",&n); p = NULL; q = NULL; slist = list(); for (i=1;i<=n;i++) { slist.InsertNode(i); } p = slist.head; while (p!=q) { for (i=1;i<3;i++) { q = p; p = p->next; } q->next = p->next; delete p; p = q->next; } cout<<p->Data<<endl; } while(scanf("%c",&s) != EOF); } */ /* 数字基ROOT*/ /* #include <iostream> using namespace std; int fun1(char *a) { int i; int sum = 0; for (i=0;i<strlen(a);i++) { if (a[i]>='0'&&a[i]<='9') { sum = sum + a[i] -'0'; } else return -1; } return sum; } int fun2(int a) { if (a<10) return a; int temp; int sum = 0; while (a) { temp = a%10; a=a/10; sum = sum + temp; } return sum; } void main() { char a[100]; int sum; while (gets(a)) { sum = fun1(a); while(sum>9) { sum = fun2(sum); } cout<<sum<<endl; } } */ /*识别有效IP地址和掩码 #include <iostream> #include <string> #include <vector> using namespace std; static int result[7]={0}; //保存最后结果的数组 string Chang(string str) //转换为二进制 { int num=atoi(str.c_str()); string tmp; char tmp1[10]={0}; itoa(num,tmp1,2); tmp=string(tmp1); if (tmp.size()<8) { string tmp2(8-tmp.size(),'0'); str=tmp2+tmp; } else str=tmp; return str; } void checkNetSegment(string mask,string ip1) { int count1=0,count2=0; int count4=0,count5=0; string str1[4],str3[4]; for(int i=0; i<mask.size(); i++) //掩码的点个数(不连续的点等于3个) if(mask[i]=='.' && mask[i+1]!='.') count1++; for(int i=0; i<ip1.size(); i++) //ip1的点个数 if(ip1[i]=='.' && ip1[i+1]!='.') count2++; for(int i=0; i<mask.size(); i++) //掩码的点个数(所有的点等于3个) if(mask[i]=='.') count4++; for(int i=0; i<ip1.size(); i++) //ip1的点个数 if(ip1[i]=='.') count5++; if(count1==count2&&count1==3 && count4==count5&&count4==3) //如果格式正确 { int i=0; //ip1先分解为4段 int flag1=0; int k=0; while(i<ip1.size()) { int tmp=i; while(isdigit(ip1[tmp])) tmp++; str1[k]=ip1.substr(i,tmp-i); k++; i=tmp+1; } i=0; //掩码分为4段 int flag3=0,flagmk=0; k=0; string test; while(i<mask.size()) { int tmp=i; while(isdigit(mask[tmp])) tmp++; str3[k]=mask.substr(i,tmp-i); k++; i=tmp+1; } for(int i=0; i<4; i++) //判断每一段的值是否在0-255之间 if(atoi(str1[i].c_str())<256 &&atoi(str1[i].c_str())>=0) flag1++; for(int i=0; i<4; i++) if(atoi(str3[i].c_str())<256 &&atoi(str3[i].c_str())>=0) flag3++; for (int i=0;i<4;i++) //判掩码是不是1在0前面 { string temp=Chang(str3[i]); test+=temp; } for (int j=1;j<32-1;j++) if (test[j-1]>test[j] && test[j]<test[j+1]) { flagmk=1; break; } if(flag1==flag3 &&flag3==4 &&flagmk==0) //格式正确 { if (str1[0]>="1" &&str1[0]<="126" ) result[0]++; else if (str1[0]>="128" &&str1[0]<="191") result[1]++; else if (str1[0]>="192"&&str1[0]<="223") result[2]++; else if (str1[0]>="224"&&str1[0]<="239") result[3]++; else if (str1[0]>="240"&&str1[0]<="255") result[4]++; else if (str1[0]=="127") result[5]++; if (str1[0]=="10"|| //私有IP (str1[0]=="172"&&str1[1]>="16"&&str1[1]<="31")|| (str1[0]=="192"&&str1[1]=="168")) result[6]++; } else result[5]++; } else //格式不正确 result[5]++; } int main() { string s1,ms,ip; while (getline(cin,s1)) { int position=s1.find("~",0); ip=s1.substr(0,position); ms=s1.substr(position+1,s1.size()-1); checkNetSegment(ms,ip); } for (int i=0;i<7;i++) { cout<<result[i]; if (i==6) cout<<endl; else cout<<" "; } return 0; } */ /*mimajiaoyan*/ #include <iostream> using namespace std; int LRS(char *a) { int leng=strlen(a); int Max=0,count=0; int start1,start2; for(int i=0;i<leng;i++) for(int j=i+1;j<leng;j++) { start1=i;start2=j; while(a[start1]==a[start2] && start1<leng && start2<leng) { count++; start1++; start2++; } if(count>Max) Max=count; count=0; } return Max; } int check(char *a) { int flag[4]={0}; int i,sum=0; if (strlen(a) < 8) { return 0; } for(i=0;i<strlen(a);i++) { if (a[i]>='A'&&a[i]<='Z') { flag[0] = 1; } else if(a[i]>='a'&&a[i]<='z') { flag[1] = 1; } else if(a[i]>='0'&&a[i]<='9') { flag[2] = 1; } else flag[3] = 1; } for(i=0;i<4;i++) { sum = sum + flag[i]; } if (sum>=3) { if (LRS(a)>2) return 0; else return 1; } else return 0; } void main() { char a[20]; while (gets(a)) { if (check(a) == 0) cout<<"NG"<<endl; else cout<<"OK"<<endl; } }
中级题和部分初级题