zoukankan      html  css  js  c++  java
  • bnuoj 字符串6题

    题目链接:http://www.bnuoj.com/v3/contest_show.php?cid=6188#problem/A

    A:水题。题意很清楚。

    代码如下:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 char s[10000];
     6 int main()
     7 {
     8     int t;
     9     scanf ("%d",&t);
    10     while (t--)
    11     {
    12         scanf ("%s",s);
    13         int sum=0;
    14         int i,j,k=0;
    15         for(i=0;i<strlen(s);i++)
    16         {
    17             if(s[i]=='O')
    18             {
    19                 sum+=k+1;
    20                 k++;
    21             }
    22             else
    23                 k=0;
    24         }
    25         printf("%d
    ",sum);
    26     }
    27     return 0;
    28 }

    B:Molar mass

    大致题意:计算给出分子式的相对分子质量。重点是对字符串的处理。

    代码:

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 char s[1000];
     7 int main()
     8 {
     9     int t;
    10     scanf ("%d",&t);
    11     while (t--)
    12     {
    13         double sum=0;
    14         scanf ("%s",s);
    15         int len=strlen(s);
    16         if(len==1)//这里对只有一个元素的分子式的一个小处理。
    17         {
    18             strcat(s,"1");
    19             len++;
    20         }
    21         //printf("%s
    ",s);
    22         for(int i=0;i<=len;)
    23         {
    24             int x=0;
    25             int j=i+1;
    26             while (s[j]<='9'&&s[j]>='0')
    27             {
    28                 x=x*10+s[j]-'0';
    29                 j++;
    30             }//找到所含原子的个数。
    31             if(j==i+1)如果j的值并为改变,说明该原子数量为1.
    32                 x=1;
    33             if(s[i]=='C')
    34                 sum+=x*12.01;
    35             else if(s[i]=='H')
    36                 sum+=x*1.008;
    37             else if(s[i]=='N')
    38                 sum+=x*14.01;
    39             else if(s[i]=='O')
    40                 sum+=x*16.00;
    41             i=j;
    42         }
    43         printf("%.3lf
    ",sum);
    44     }
    45     return 0;
    46 }

    C:Digit Counting

    大致题意:计算1~n这些数里0~9这10个数字出现的次数。水水水!

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 int main()
     4 {
     5     int t;
     6     scanf ("%d",&t);
     7     while (t--)
     8     {
     9         int a[10];
    10         memset(a,0,sizeof(a));
    11         int n;
    12         scanf ("%d",&n);
    13         for(int i=1;i<=n;i++)
    14         {
    15             int temp=i;
    16             while (temp)
    17             {
    18                 a[temp%10]++;
    19                 temp/=10;
    20             }
    21         }
    22         for(int i=0;i<10;i++)
    23             printf("%d ",a[i]);
    24         printf("
    ");
    25     }
    26     return 0;
    27 }

    D:periodic strings

    大致题意:一个字符串又多个循环节组成。我们需要做的是找出里面长度最小的循环节并输出。

    我用的是kmp算法。其实这么小的数据量枚举就可以处理。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 char s[10000];
     7 int next[10000];
     8 void getnext()
     9 {
    10     next[0]=-1;
    11     int k=-1,j=0;
    12     int len=strlen(s);
    13     while (j<len)
    14     {
    15         if(k==-1||s[j]==s[k])
    16         {
    17             j++;
    18             k++;
    19             if(s[j]!=s[k])
    20             next[j]=k;
    21             else
    22                 next[j]=next[k];
    23         }
    24         else
    25             k=next[k];
    26     }
    27 }
    28 int main()
    29 {
    30     int t;
    31     scanf ("%d",&t);
    32     while(t--)
    33     {
    34         scanf ("%s",s);
    35         memset(next,0,sizeof(next));
    36         getnext();
    37         int len=strlen(s);
    38         if(len%(len-next[len])==0)
    39             printf("%d
    ",len-next[len]);
    40         else
    41             printf("%d
    ",len);
    42         if(t)
    43             printf("
    ");
    44     }
    45     return 0;
    46 }

    E:Puzzle 

    大致题意:一个5X5的矩阵,里面放了24个字母和一个空格。现在对这个空格有交换A上B下L左R右四种操作。

                 现在给出这样的矩阵和若干操作,打印出操作后的矩阵。

                这题难度在于字符的读入与读出。真的好麻烦。代码没有A,不过样例过了,以后更新。

    代码如下:

      1 #include <cstdio>
      2 #include <cstring>
      3 
      4 char s[100][100];
      5 int x,y,temp;
      6 int ok(int xx,int yy)
      7 {
      8     if(xx<5&&xx>=0&&yy<5&&yy>=0)
      9         return 1;
     10     else
     11         return 0;
     12 }
     13 void change(int xx,int yy,char c)//改变字符的操作。。
     14 {
     15     if(c=='A')
     16     {
     17         if(ok(xx-1,yy))
     18         {
     19             s[xx][yy]=s[xx-1][yy];
     20             x=xx-1;
     21         }else
     22         {
     23             temp=1;
     24             return ;
     25         }
     26     }else if(c=='R')
     27     {
     28         if(ok(xx,yy+1))
     29         {
     30             s[xx][yy]=s[xx][yy+1];
     31             y=yy+1;
     32         }else
     33         {
     34             temp=1;
     35             return ;
     36         }
     37     }else if(c=='B')
     38     {
     39         if(ok(xx+1,yy))
     40         {
     41             s[xx][yy]=s[xx+1][yy];
     42             x=xx+1;
     43         }else
     44         {
     45             temp=1;
     46             return ;
     47         }
     48     }else if(c=='L')
     49     {
     50         if(ok(xx,yy-1))
     51         {
     52             s[xx][yy]=s[xx][yy-1];
     53             y=yy-1;
     54         }else
     55         {
     56             temp=1;
     57             return ;
     58         }
     59     }
     60 }
     61 int main()
     62 {
     63     int t=0;
     64     while (1)
     65     {
     66         int num=0;
     67         for(int i=0;i<5;i++)
     68         {
     69             gets(s[i]);
     70             if(strlen(s[i])==1)
     71             {
     72                 num=1;
     73                 break;
     74             }
     75         }
     76         if(num)//读入一个字符Z的时候结束程序。
     77             break;
     78         for(int i=0;i<5;i++)
     79         {
     80             int flag=0;
     81             for(int j=0;j<5;j++)
     82             {
     83                 if(s[i][j]==' ')
     84                 {
     85                     x=i,y=j;
     86                     flag=1;
     87                     break;
     88                 }
     89             }
     90             if(flag)
     91                 break;
     92         }//找到属于空格的坐标。
     93         //printf("%d %d
    ",x,y);
     94         char c;
     95         temp=0;
     96         while (1)
     97         {
     98             scanf ("%c",&c);
     99             if(c=='0')
    100                 break;
    101             if(c=='
    ')
    102                 continue;
    103             change(x,y,c);//读入对空格的操作。因为操作可能有两行。所以需要处理。
    104         }
    105         printf("Puzzle #%d:
    ",++t);//实例的个数
    106         s[x][y]=' ';
    107         if(temp==0)
    108             for(int i=0;i<5;i++)
    109             {
    110                 for(int j=0;j<5;j++)
    111                 {
    112                     if(j==4)
    113                         printf("%c",s[i][j]);
    114                     else
    115                         printf("%c ",s[i][j]);
    116                 }
    117                 printf("
    ");
    118             }
    119         else
    120             printf("This puzzle has no final configuration.
    ");
    121         printf("
    ");
    122         gets(s[0]);//这里其实我也有疑问??不过为什么必须在循环结束读入s[0].如果有大神看到,求告知。日后修改A了的代码。
    123     }
    124     return 0;
    125 }

    F:Crossword Answered

    大致题意:这题就是一个坑的填字游戏!!!!

    没有写

  • 相关阅读:
    星云精准测试有力提升金融复杂系统的测试能效
    疫情之下,精准测试的智能可信模式正在成为中流砥柱
    星云测试插装编译流程与CI集成
    自动化测试与精准测试的无缝对接
    “静默式”精准测试,让企业零成本完成黑盒测试的升级对接
    精准测试与开源工具Jacoco的覆盖率能力大PK
    【星云测试】Devops微服务架构下具有代码级穿透能力的精准测试
    【星云测试】开发者测试-采用精准测试工具对Spring Boot应用进行测试
    分享我们团队管理的最佳实践——程序员的周报应如何填写
    [原创]基于VueJs的前后端分离框架搭建之完全攻略
  • 原文地址:https://www.cnblogs.com/bei-insomia/p/4445242.html
Copyright © 2011-2022 走看看