1.26——寒假练习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.26——寒假练习相关的知识,希望对你有一定的参考价值。

UVA10010 

好像说这道题我做了好久~快哭了~最后还是利用了udebug那个网站,才找到了bug

这道题收获很大对于我这个代码能力不强的人,基础知识不牢的人来说多练练还是有好处的~

1.思路:这道题给定一个二维数组,然后给你多个字符串,问你这些字符串在这个二维数组中是否能找到,重点是:方向有八个:向上,向下,向左,向右,左上,左下,右上,右下。所以读懂题意非常重要!

2.一个很重要的bug就是想说

while(str[x++][y]==test[t++]);
while(a++==b++);

上面这两句代码不一样:

第一行的意思是,先x++,t++,再比较;

第二行的意思是先判断ab是否相等,a++,b++;

技术分享UVA10010
  1 #include<cstdio>
  2 #include<cstring>
  3 #include<iostream>
  4 using namespace std;
  5 int m,n,T;
  6 char str[55][55];
  7 char test[55];
  8 int len;
  9 int call(int x,int y,int len){
 10     //向左
 11     if(x+1-len>=0){
 12             //printf("1...........\n");
 13             int i=x,j=y;
 14             int t=0;
 15            // printf("%c %c",str[i][j],test[t]);
 16             while(t<len&&str[i][j]==test[t]){
 17                 i--;t++;
 18             }
 19            // printf("%d\\\\\t",t);
 20             if(t==len)return 1;
 21 
 22     }
 23     //向右
 24     if(m-x>=len){
 25         //printf("2...........\n");
 26         int i=x,j=y;
 27         int t=0;
 28         while(str[i][j]==test[t]&&t<len){
 29             i++;
 30             t++;
 31         }
 32         if(t==len)return 1;
 33     }
 34     //向上
 35     if(y+1-len>=0){
 36         //printf("3...........\n");
 37         int i=x,j=y;
 38         int t=0;
 39         while(str[i][j]==test[t]&&t<len){
 40             j--;
 41             t++;
 42         }
 43         if(t==len)return 1;
 44     }
 45     //向下
 46     if(n-y>=len){
 47         //printf("4...........\n");
 48         int i=x,j=y;
 49         int t=0;
 50         while(str[i][j]==test[t]&&t<len){
 51             j++;t++;
 52         }
 53         if(t==len)return 1;
 54     }
 55     //左上-+
 56     if(x+1-len>=0&&n-y>=len){
 57       // printf("5...........\n");
 58             int i=x,j=y;
 59             int t=0;
 60             while(str[i][j]==test[t]&&t<len){
 61                 i--;j++;t++;
 62             }
 63             if(t==len)return 1;
 64     }
 65     //右上+-
 66     if(m-x>=len&&y+1-len>=0){
 67         //printf("6...........\n");
 68         int i=x,j=y;
 69         int t=0;
 70         while(str[i][j]==test[t]&&t<len){
 71             i++;j--;t++;
 72         }
 73         if(t==len)return 1;
 74     }
 75     //左下--
 76     if(y+1-len>=0&&x+1-len>=0){
 77         //printf("7...........\n");
 78         int i=x,j=y;
 79         int t=0;
 80         while(str[i][j]==test[t]&&t<len){
 81             i--;j--;t++;
 82         }
 83         if(t==len)return 1;
 84     }
 85     //右下++
 86     if(n-y>=len&&m-x>=len){
 87         //printf("8...........\n");
 88         int i=x,j=y;
 89         int t=0;
 90         while(str[i][j]==test[t]&&t<len){
 91             i++;j++;t++;
 92         }
 93         if(t==len)return 1;
 94     }
 95     return 0;
 96 }
 97 int main(){
 98     //freopen("10010.txt","r",stdin);
 99     //freopen("10011.txt","w",stdout);
100     int z;
101     scanf("%d",&T);
102     while(T--){
103             getchar();
104         scanf("%d%d",&m,&n);
105         for(int i=0;i<m;i++){
106             scanf("%s",&str[i]);
107         }
108         for(int x=0;x<m;x++){
109                 for(int y=0;y<n;y++){
110                     if(str[x][y]>=A&&str[x][y]<=Z){
111                         str[x][y]+=32;
112                     }
113                 }
114         }
115         scanf("%d",&z);
116         while(z--){
117             scanf("%s",test);
118             int len=strlen(test);
119             for(int i=0;i<len;i++){
120                 if(test[i]>=A&&test[i]<=Z){
121                     test[i]+=32;
122                     //printf("%c ",test[i]);
123                 }
124             }
125             int p=0;
126             for(int x=0;x<m;x++){
127                 for(int y=0;y<n;y++){
128                         if(str[x][y]==test[0]){
129                             if(call(x,y,len)){
130                             printf("%d %d\n",x+1,y+1);
131                             p=1;
132                             break;
133                         }
134                         }
135 
136                 }
137                 if(p)break;
138             }
139         }
140         if(T!=0)printf("\n");
141     }
142 return 0;
143 }

 UVA10361

这道题真的是很折腾人啊~

一句话,不能轻视水题~虽然这题一点都不水~

1.题意:很简单的s1<s2>s3<s4>s5;第一个行的字符串把左右括号去掉输出,第二行把...变成s3<s2><s1><s4>输出即可;

2.思路:还是用最简单的一个一个字符查找,通过将上面的后四个字符存到四个数组中,然后按照输出要求的顺序输出。

3.我错的一个重要的地方就是两个gets函数中间使用了getchar,本意是为了过滤掉回车的,然而百度之后,得知,gets函数是读到回车结束,但是回车不存入数组中!!!!

技术分享
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
    char l1[105],l2[105];
    char a[5][105];
    int T;
  //  freopen("10010.txt","r",stdin);
   // freopen("10011.txt","w",stdout);
    scanf("%d",&T);
    getchar();
    while(T--){
        gets(l1);
        //getchar();
        gets(l2);
   //     printf("%s %s",l1,l2);
        int w=0;
        int len=strlen(l1);
        int k=0;
        while(k<len){
            if(l1[k]==<){
                    k++;
                    int i;
                    i=0;
                while(l1[k]!=>){
                    a[w][i++]=l1[k];
                    k++;
                }
                a[w][i++]=\0;
                w++;
                k++;
                i=0;
                while(l1[k]!=<){
                    a[w][i++]=l1[k];
                    k++;
                }
                k++;
                a[w][i++]=\0;
                w++;
                i=0;
                while(l1[k]!=>){
                    a[w][i++]=l1[k];
                    k++;
                }
                a[w][i++]=\0;
                w++;
                i=0;
                k++;
                while(i<len){
                    a[w][i++]=l1[k];
                    k++;
                }
                a[w][i++]=\0;
            }else
             k++;
        }
/*        for(int i=0;i<=w;i++){
            printf("%s\n",a[i]);
        }*/
        int num=0;
        while(num<len){
            if(l1[num]!=<&&l1[num]!=>){
                printf("%c",l1[num]);
            }
            num++;
        }
        printf("\n");
         int num1=0;
         int lens=strlen(l2);
        while(num1<lens){
            if(l2[num1]==.){
                printf("%s%s%s%s",a[2],a[1],a[0],a[3]);
                break;
            }
            printf("%c",l2[num1]);
            num1++;
        }
        printf("\n");
    }
return 0;
}
UVA10361

 

附录:

仅仅做了两道水题就发现我还是基础不牢~还是需要多学习多努力!

意识到大学没有多长时间可以再搞ACM了,所以我想按照日记的形式记录我最后的ACM学习生涯~加油!坚持!

 

以上是关于1.26——寒假练习的主要内容,如果未能解决你的问题,请参考以下文章

2018寒假游记

寒假每日一题回文平方(个人练习)详细题解+推导证明(第五天)

2018年全国多校算法寒假训练营练习比赛(第五场)题解

2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈

2018年全国多校算法寒假训练营练习比赛(第一场)C 六子冲

2018年全国多校算法寒假训练营练习比赛(第三场)题解