首页 > 学院 > 开发设计 > 正文

PAT-DAY-2

2019-11-08 02:47:13
字体:
来源:转载
供稿:网友

1003. 我要通过!(20)

     可看出来其实T右边的A的数目等于P左边A的数组乘以P,T之间A的数目,这就是这个字符串正确的规律,写一个方法来判断字符串是否正确,首先需要先将P,T的在字符串中的位置获取,这个可以使用find函数,如果P,T其中一个不存在或者PT中间没有A或P>T,那么必然是错误的,然后将字符串按P,T为分割线化成3个字符串,这样我们就可以对它的数目来判断了,如果这三个子串中有不是A的字符,那么必然是错的,如果这三个子串符合左右两边都是空的,或者左边的数目乘以中间的数目等于右边A的数目,那么这个字符串是正确的,其他的则都是错误的,此题结束.    C++的STL中字符串查找方面函数的简介:       (1)find()        String s1="abcdef";String s2="bc";s1.find(s2);//查找第一次出现的目标字符串,如果查找成功则返回第一次出现的位置,否则返回npos;        s1.find(s2,2);//查找从指定位置开始的第一次出现的目标字符串,从s1的第二个字符开始查找子s2;(2)find_first_of()查找子串中某个字符最先出现的位子,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;若匹配失败,返回npos。字符串详解:http://www.cnblogs.com/chuncn/archive/2009/02/13/1390176.html#include <iostream>  #include <cstdio>  #include <string>    using namespace std;    void check();  int main()  {      int N;      scanf("%d", &N);      for(int i=0;i<N;i++) {          check();      }      return 0;  }    void check()  {      string s;      cin>>s;      int indexP = s.find('P', 0);      int indexT = s.find('T', 0);      if(indexP==string::npos || indexT==string::npos || (indexP>=indexT-1)) {          PRintf("NO/n");      }else {          string a(s, 0, indexP);          string b(s, indexP+1, indexT-indexP-1);          string c(s, indexT+1, s.length()-indexT-1);          string k = a + b + c;          if(k.find_first_not_of('A') != string::npos){              printf("NO/n");          } else{              if(indexP == 0 && s.length()-indexT-1 == 0)                  printf("YES/n");              else if(indexP * (indexT-indexP-1) == (s.length()-indexT-1))                  printf("YES/n");              else                  printf("NO/n");          }      }  }

1005. 继续(3n+1)猜想 (25)

6    3 5 8 4 2 1
3    5 8 4  2  1
5    8  4 2  1
8    4 2 1 
7    11 17 26 13 20 10 5 
11   17 26 13 20 10 5 #include <stdio.h>  #include <stdlib.h>  #include"string.h"  int main()  {      int array[101];//n<=100,开一个101的数组就可以了      memset(array,0,sizeof(array));      int n;      scanf("%d",&n);      for(int i=1;i<=n;i++){          int num;          scanf("%d",&num);          if(array[num]==0){             array[num]=1;             while(num!=1){                  if(num%2==0){                     num/=2;                     if(num<=100)//没有这句话,数组会越界                        array[num]=-1;                 }                 else{                     num=(num*3+1)/2;                     if(num<=100)//同上                        array[num]=-1;                 }            }           }            }      int flag=0;      for(int j=100;j>=1;j--)          if(array[j]==1){             if(flag==0)                printf("%d",j);             else                printf(" %d",j);          flag=1;      }      return 0;  }  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表