• 洛谷试炼场1-5---简单字符串【字符串】


    P1055 ISBN号码

    https://www.luogu.org/problemnew/show/P1055

    题意:一个ISBN号码形如x-xxx-xxxxx-c,将ISBN号码中的前九个数字按顺序分别乘上1,2,3,...,9之后相加取模11得到c。问给出的c是否合法,若不合法输出合法的ISBN号码。

    思路:要注意结果为10时,应该输出X。

     1 #include <iostream>
     2 #include <set>
     3 #include <cmath>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <queue>
     9 #include <map>
    10 using namespace std;
    11 typedef long long LL;
    12 #define inf 0x7f7f7f7f
    13 
    14 char s[15];
    15 
    16 int main()
    17 {
    18     scanf("%s", s);
    19     int ans = 0;
    20     ans += s[0] - '0';
    21     for(int i = 2; i <= 4; i++){
    22         ans += (s[i] - '0') * i;
    23     }
    24     for(int i = 5; i <= 9; i++){
    25         ans += (s[i + 1] - '0') * i;
    26     }
    27     if((ans % 11) == s[12] - '0'){
    28         printf("Right
    ");
    29     }
    30     else if((ans % 11) == 10 && s[12] == 'X'){
    31         printf("Right
    ");
    32     }
    33     else{
    34         for(int i = 0; i <= 11; i++){
    35             printf("%c", s[i]);
    36         }
    37         if((ans % 11) == 10){
    38             printf("X
    ");
    39         }
    40         else{
    41             printf("%c
    ", (ans % 11) + '0');
    42         }
    43     }
    44     return 0;
    45 }
    View Code

    P1200 你的飞碟在这儿

    https://www.luogu.org/problemnew/show/P1200

    题意:给两个字符串,问字符串中各个字符表示的值之积取模47是否相同。

    思路:WA了一次是因为没注意到字符串不一定是6位的。

     1 #include <iostream>
     2 #include <set>
     3 #include <cmath>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <queue>
     9 #include <map>
    10 using namespace std;
    11 typedef long long LL;
    12 #define inf 0x7f7f7f7f
    13 
    14 char ufo[10], group[10];
    15 
    16 int main()
    17 {
    18     scanf("%s", ufo);
    19     scanf("%s", group);
    20     LL ansu = 1;
    21     int lenu = strlen(ufo), leng = strlen(group);
    22     for(int i = 0; i < lenu; i++){
    23         ansu = ansu * (ufo[i] - 'A' + 1) % 47;
    24     }
    25     LL ansg = 1;
    26     for(int i = 0; i < leng; i++){
    27         ansg = ansg * (group[i] - 'A' + 1) % 47;
    28     }
    29     if(ansu == ansg){
    30         printf("GO
    ");
    31     }
    32     else{
    33         printf("STAY
    ");
    34     }
    35     return 0;
    36 }
    View Code

    P1308 统计单词数

    https://www.luogu.org/problemnew/show/P1308

    题意:给一个单词,下一行给一串由单词和空格组成的文章。问这个单词在文章中出现的次数已经单词第一次出现时在第一个字符在文章中的下标。

    思路:这道题的输入真的是很麻烦。学习到了使用scanf("%[^ ]", article);[]中给出的是格式符,^ 就表示读到 结束,而scanf("%[a-zA-Z0-9]",str)表示只匹配输入是大小写字母和数字,遇到非数字和字母时输入结束。读入文章之后,再根据空格划分单词,使用strcmp进行比较

     1 #include <iostream>
     2 #include <set>
     3 #include <cmath>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <queue>
     9 #include <map>
    10 using namespace std;
    11 typedef long long LL;
    12 #define inf 0x7f7f7f7f
    13 
    14 char word[15], article[1000005], tmp[15];
    15 
    16 int main()
    17 {
    18     //freopen("in.txt", "r", stdin);
    19     scanf("%s", word);
    20     int lenw = strlen(word);
    21     for(int i = 0; i < lenw; i++){
    22         if(word[i] >= 'A' && word[i] <= 'Z'){
    23             word[i] += 32;
    24         }
    25     }
    26     getchar();
    27 
    28     scanf("%[^
    ]", article);
    29     int lena = strlen(article);
    30     int j = 0, cnt = 0, mini = -1;
    31     //bool flag = true;
    32     for(int i = 0; i < lena; i++){
    33         if(article[i] >= 'A' && article[i] <= 'Z'){
    34             article[i] += 32;
    35         }
    36         if(article[i] == ' '){
    37             //printf("%s
    ", tmp);
    38             //tmp[j] = 0;
    39             if(strcmp(tmp, word) == 0){
    40                 cnt++;
    41                 if(mini == -1){
    42                     mini = i - lenw;
    43                 }
    44             }
    45             j = 0;
    46             memset(tmp, 0, sizeof(tmp));
    47         }
    48         else{
    49             tmp[j++] = article[i];
    50         }
    51     }
    52     //printf("%s
    ", tmp);
    53     if(strcmp(tmp, word) == 0){
    54         cnt++;
    55         if(mini == -1){
    56             mini = lena - 1 - lenw;
    57         }
    58     }
    59 
    60     if(cnt){
    61         printf("%d %d
    ", cnt, mini);
    62     }
    63     else{
    64         printf("-1
    ");
    65     }
    66     return 0;
    67 }
    View Code

    P1553 数字反转(升级版)

    https://www.luogu.org/problemnew/show/P1553

    思路:暴力模拟一下。注意处理前导零,小数部分和整数部分不同,前导零是要的,末尾的零是不要的。

      1 #include <iostream>
      2 #include <set>
      3 #include <cmath>
      4 #include <stdio.h>
      5 #include <cstring>
      6 #include <algorithm>
      7 #include <vector>
      8 #include <queue>
      9 #include <map>
     10 using namespace std;
     11 typedef long long LL;
     12 #define inf 0x7f7f7f7f
     13 
     14 char s[25], revs[25];
     15 
     16 int main()
     17 {
     18     scanf("%s", s);
     19     int fenshu = -1, xiaoshu = -1;
     20     bool allzero = true, allzero2 = true;
     21     int n = strlen(s);
     22     if(s[n - 1] == '%'){
     23         for(int i = n - 2, j = 0; i >= 0;i--, j++){
     24             revs[j] = s[i];
     25             if(s[i] - '0'){
     26                 allzero = false;
     27             }
     28         }
     29         if(allzero){
     30             printf("0%
    ");
     31         }
     32         else{
     33             revs[n - 1] = '%';
     34             bool flag = true;
     35             for(int i = 0; i < n; i++){
     36                 if(revs[i] == '0' && flag)continue;
     37                 if(revs[i] != '0' && flag)flag = false;
     38                 printf("%c", revs[i]);
     39             }
     40             printf("
    ");
     41         }
     42         return 0;
     43     }
     44 
     45     for(int i = 0; i < n; i++){
     46         if(s[i] == '.'){
     47             xiaoshu = i;
     48         }
     49         else if(s[i] == '/'){
     50             fenshu = i;
     51         }
     52         else if(s[i] != '0'){
     53             if(xiaoshu != -1 || fenshu != -1){
     54                 allzero2 = false;
     55             }
     56             else{
     57                 allzero = false;
     58             }
     59         }
     60     }
     61     //cout<<allzero<<endl;
     62 
     63     if(fenshu == -1 && xiaoshu == -1){
     64         if(allzero){
     65             printf("0
    ");
     66         }
     67         else{
     68             for(int i = n - 1, j = 0; i >= 0; i--, j++){
     69                 revs[j] = s[i];
     70             }
     71             bool flag = true;
     72             for(int i = 0; i < n; i++){
     73                 if(revs[i] == '0' && flag)continue;
     74                 if(revs[i] != '0' && flag)flag = false;
     75                 printf("%c", revs[i]);
     76             }
     77             printf("
    ");
     78         }
     79 
     80     }
     81     else if(fenshu != -1){
     82         int j = 0;
     83         for(int i = fenshu - 1; i >= 0; i--, j++){
     84             revs[j] = s[i];
     85         }
     86         revs[j++] = '/';
     87         for(int i = n - 1; i>= fenshu + 1; i--, j++){
     88             revs[j] = s[i];
     89         }
     90         if(allzero){
     91             printf("0");
     92         }
     93         else{
     94             bool flag = true;
     95             for(int i = 0; i < fenshu; i++){
     96                 if(revs[i] == '0' && flag)continue;
     97                 if(revs[i] != '0' && flag)flag = false;
     98                 printf("%c", revs[i]);
     99             }
    100         }
    101         printf("/");
    102         if(allzero2 = 0){
    103             printf("0");
    104         }
    105         else{
    106             bool flag = true;
    107             for(int i = fenshu + 1; i < n; i++){
    108                 if(revs[i] == '0' && flag)continue;
    109                 if(revs[i] != '0' && flag)flag = false;
    110                 printf("%c", revs[i]);
    111             }
    112         }
    113         printf("
    ");
    114     }
    115     else{
    116         int j = 0;
    117         for(int i = xiaoshu - 1; i >= 0; i--, j++){
    118             revs[j] = s[i];
    119         }
    120         revs[j++] = '.';
    121         for(int i = n - 1; i >= xiaoshu + 1; i--, j++){
    122             revs[j] = s[i];
    123         }
    124 
    125         if(allzero){
    126             printf("0");
    127         }
    128         else{
    129             bool flag = true;
    130             for(int i = 0; i < xiaoshu; i++){
    131                 if(revs[i] == '0' && flag)continue;
    132                 if(revs[i] != '0' && flag)flag = false;
    133                 printf("%c", revs[i]);
    134             }
    135         }
    136         printf(".");
    137         if(allzero2){
    138             printf("0");
    139         }
    140         else{
    141             int zero = n - 1;
    142             for(int i = n - 1; i >= xiaoshu + 1; i--){
    143                 if(revs[i] != '0'){
    144                     break;
    145                 }
    146                 else{
    147                     zero--;
    148                 }
    149             }
    150             for(int i = xiaoshu + 1; i <= zero; i++){
    151                 printf("%c", revs[i]);
    152             }
    153         }
    154         printf("
    ");
    155     }
    156     return 0;
    157 }
    View Code

    P1598 垂直柱状图

    https://www.luogu.org/problemnew/show/P1598

    思路:乍一看输出好麻烦啊,不知道怎么弄。暴力输出就好了。用scanf("%[^ ]", s);循环整行读入的时候记得要先getchar把换行符给读掉。

     1 #include <iostream>
     2 #include <set>
     3 #include <cmath>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <queue>
     9 #include <map>
    10 using namespace std;
    11 typedef long long LL;
    12 #define inf 0x7f7f7f7f
    13 
    14 int cnt[26];
    15 char s[105];
    16 
    17 int main()
    18 {
    19     int maxn = -1;
    20     for(int i = 0; i < 4; i++){
    21         scanf("%[^
    ]", s);
    22         int n = strlen(s);
    23         for(int j = 0; j < n; j++){
    24             if(s[j] >= 'A' && s[j] <= 'Z'){
    25                 cnt[s[j] - 'A']++;
    26                 maxn = max(maxn, cnt[s[j] - 'A']);
    27             }
    28         }
    29         getchar();
    30     }
    31 
    32     for(int i = maxn; i >= 1; i--){
    33         for(int ch = 0; ch < 25; ch++){
    34             if(cnt[ch] >= i){
    35                 printf("* ");
    36             }
    37             else{
    38                 printf("  ");
    39             }
    40         }
    41         if(cnt[25] >= i){
    42             printf("*
    ");
    43         }
    44         else{
    45             printf(" 
    ");
    46         }
    47     }
    48     for(int i = 0; i < 25; i++){
    49         printf("%c ", i + 'A');
    50     }
    51     printf("Z
    ");
    52     return 0;
    53 }
    View Code

    P1914 小书童——密码

    https://www.luogu.org/problemnew/show/P1914

    思路:要注意取模防溢出。

     1 #include <iostream>
     2 #include <set>
     3 #include <cmath>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <queue>
     9 #include <map>
    10 using namespace std;
    11 typedef long long LL;
    12 #define inf 0x7f7f7f7f
    13 
    14 int n;
    15 char s[55];
    16 
    17 int main()
    18 {
    19     scanf("%d", &n);
    20     scanf("%s", s);
    21     int len = strlen(s);
    22     for(int i = 0; i < len; i++){
    23         printf("%c", (s[i] - 'a' + n) % 26 + 'a');
    24     }
    25     printf("
    ");
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    UVALive 6044(双连通分量的应用)
    hdu 3760(2次bfs求最短路)
    zoj 3370(二分+二分图染色)
    sgu 326(经典网络流构图)
    hdu 4291(矩阵+暴力求循环节)
    uva 11381(神奇的构图、最小费用最大流)
    hdu 4685(匹配+强连通分量)
    hdu 4496(并查集)
    hdu 4722(记忆化搜索)
    Linux安装Nginx使用负载均衡
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9839833.html
Copyright © 2020-2023  润新知