UVA: Beginning Algorithm Contests (Rujia Liu) :: Volume 0. Getting Started

   ACM Getting Started

   熟悉刷题的基本输入输出操作和 刷水题的蒻鲫故事 

   吃了没文化的亏 简单题看题意半天 实在不行看中英文对照了 就只看输入输出猜猜题意 菜啊 

 

494 - Kindergarten Counting Game

Everybody sit down in a circle. Ok. Listen to me carefully. “Woooooo, you scwewy wabbit!” Now, could someone tell me how many words I just said? Input Input to your program will consist of a series of lines, each line containing multiple words (at least one). A “word” is defined as a consecutive sequence of letters (upper and/or lower case). Output Your program should output a word count for each line of input. Each word count should be printed on a separate line. Sample Input Meep Meep! I tot I taw a putty tat. I did! I did! I did taw a putty tat. Shsssssssssh ... I am hunting wab。。。。

 题目大意 输入一句话 输出里面的单词数  题解遇字符标记下 下一个不是字符且有标记时 计数器+1

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main(){
 5     char s[100010];
 6     while(gets(s))
 7     {
 8         int m=strlen(s);int i=0;int ans=0;
 9         int flag = 0;
10         for(;i<m;i++){
11             if(!flag)
12                 if(s[i]<='z' && s[i] >= 'A')
13                     flag=1;
14                 
15             if(flag && (s[i]>'z'||(s[i]<'A')))
16                 {ans++;flag=0;}
17         }
18         printf("%d\n",ans);
19     }
20     return 0;
21 }
494

 

Uva414Machined Surfaces

讲道理啊  做起来就是阅读理解  水题无疑 

 题意 输入一个 n 再输入 n 行字符串(左右为X 中间为空格 注意),问最多能移动几格 

 移动就是左边的X从中间空位移到最右边的第一个X 

 把最小空格数记录下  每行减去最小空格数相加即可   代码如下 至于fgets 还是gets 都随便

 用fgets(s,27,stdin) 只能读入最大 26 个字符的字符串  WA两发 活该 

#include<string.h>//uva414  //Machined Surfaces  
 //memset(a,0,sizeof(a));
#include<stdio.h> 
int main(){
    int i,j,n,a[20];char s[26];
    while(scanf("%d%*c",&n) && n){
        int min =100,ans =0;
        for( i=0;i< n;i++)
        {
            //getchar();
            int cnt = 0;            
            fgets(s,27,stdin);
            int len= strlen(s);
            for( j=0; j< len; j++){
                if(s[j] == 'X')
                    cnt++;
                }
            a[i] = 25-cnt;
            if(a[i] < min) min = a[i];

            ans += a[i];
        }
        printf("%d\n",ans-min*n );
    }
    return 0;
}


#include<stdio.h> 
int main(){
    int i,j,n,a[20];char s[26];
    while(scanf("%d",&n) && n){
        int min =100,ans =0;getchar();
        for( i=0;i< n;i++)
        {
            int cnt = 0;            
            fgets(s,27,stdin);
            int len= strlen(s);
            for( j=0; j< len; j++){
                if(s[j] == 'X')
                    cnt++;
                }
            a[i] = 25-cnt;
            if(a[i] < min) min = a[i];

            ans += a[i];
        }
        printf("%d\n",ans-min*n );
    }
    return 0;
}


#include<stdio.h> 
int main(){
    int i,j,n,a[20];char s[26];
    while(scanf("%d%*c",&n) && n){
        int min =100,ans =0;
        for( i=0;i< n;i++)
        {
            int cnt = 0;            
            gets(s);
            int len= strlen(s);
            for( j=0; j< len; j++){
                if(s[j] == 'X')
                    cnt++;
                }
            a[i] = 25-cnt;
            if(a[i] < min) min = a[i];

            ans += a[i];
        }
        printf("%d\n",ans-min*n );
    }
    return 0;
}


#include<stdio.h> 
int main(){
    int i,j,n,a[20];char s[26];
    while(scanf("%d",&n) && n){
        int min =100,ans =0;
        for( i=0;i< n;i++)
        {
            int cnt = 0;            
            getchar();fgets(s,26,stdin);
            int len= strlen(s);
            for( j=0; j< len; j++){
                if(s[j] == 'X')
                    cnt++;
                }
            a[i] = 25-cnt;
            if(a[i] < min) min = a[i];

            ans += a[i];
        }
        printf("%d\n",ans-min*n );
    }
    return 0;
}
View Code

 

 

uva490  “Rotating Sentences,”

优秀的字符串水题 

 题意 输入多行句子  将句子按从后到前竖着输出  

 定义一个二维数组  输入计数  直到NULL 如果用 gets(s[tot]) 的话就没啥 

 你用fget(s[tot],110,stdin)就得注意 它最后会多输出一个 \n  没了 代码如下

  PE 到想哭  AC就在眼前  那么近却又那么远 

#include <stdio.h>//uva490 Rotating Sentences
#include <string.h>
char s[110][110];
int main(){
    int i =0,j,cnt =0,len,minu=0 ;
    int tot = 0 ;
    while ( gets(s[tot]) != NULL){// ~scanf("%[^\n]",&s[tot]) ){
        len = strlen(s[tot]);
        //if(len == 0) break;
        if(len > minu) minu = len;
        i++;cnt++;
        //printf("%s\n", s[tot]);
        tot++;
    }
    for( i= 0;i< minu ;i++)
    {
        
        for(int j= tot-1;j >= 0; j--) 
        {
            len = strlen(s[j]);
            if( i >= len )
                printf(" ");
            else 
                printf("%c", s[j][i]);
        }
        printf("\n");
    }
    return 0;
}

#include <iostream>
#include <stdio.h> 
#include <string.h>
char s[110][110];
int main(){
    int i =0,j,cnt =0,len,minu=0 ;
    int tot = 0 ;
    while ( fgets(s[tot],110,stdin) != NULL)
    { 
        len = strlen(s[tot]);
         
        if(len > minu) minu = len;
        if(s[tot][len-1] == '\n')
            s[tot][len-1] = '\0';
        tot++;
    }
    for( i= 0;i< minu  ;i++)
    {
        for(int j= tot-1;j >= 0; j--) 
        {
            len = strlen(s[j]);
            if( i >= len )
                printf(" ");
            else 
                printf("%c", s[j][i]);
        }
        i== minu-1 ? :printf("\n");
    }
    return 0;
}
View Code

 

uva445 Marvelous Mazes 

题意 输入多行字符串 按例输出 11x 是输出两个x 

while(n--)  如果n 为 0 ,进入的话 最后跳出的时候是n = -1   自增自减的故事 所以可以这样 while(n && n--)

 还是慎用 不然你会体验很好玩的脑阔疼

#include<stdio.h> //uva445 Marvelous Mazes 
#include<string.h>
#include<iostream>
#include<ctype.h>
int main(){
    char s[150];int n;
    while(gets(s) != NULL)
    {
        int len =strlen(s);n = 0;
        if(len == 0) printf("\n");
        for(int i =0; i< len;i++){
            if(s[i] == '!'){
                printf("\n");
                continue;
            }
            if( s[i] >= '0' && s[i] <= '9' ) {
                n += (s[i]-'0');
                continue ;
            }
            while(n--){
             if(s[i] == 'b')printf(" ");
             else printf("%c",s[i]);
            } n =0;
            if(i == len-1)printf("\n");
        }
    }return 0;
}
View Code

 

uva488 Triangle Wave

 题意  看题半天很难受 还是不懂 直接样例了  输入n 输出n 组 ,每组 两个数

 一个是最大值  一个是次数

 类似  4 5   就输出五次 1 22 333 4444 55555 4444 333 22 1 中间是换行   

 PE 了六发就很难受   小白么 就是让 不是ac的各种打打脸

#include<stdio.h>//uva488 Triangle Wave
#include<string.h>

int main(){
    int n,a,b;scanf("%d",&n);
    while(n--)
    {
        scanf("%d%d",&a,&b);
        for(int k=1; k<= b;k++)
        {
            for(int i= 1;i < a; i++)
            {
                for(int j=1 ; j<= i;j++)
                    printf("%d", i);
                printf("\n");
            }
            for(int i=1;i <= a;i++)
                printf("%d",a );
            printf("\n");
            for(int i= a-1;i >= 1; i--)
            {
                for(int j=i ; j >= 1;j--)
                    printf("%d", i);
                printf("\n");
            }if(k < b)printf("\n");        
        }
        if(n > 0)printf("\n");//wtm PE
    }return 0;
}
View Code

 

uva489 Hangman Judge

 给定两个字符串,第一个串是用来匹配的,从第二个串的第一个字符开始匹配,如果第二个串中的字符在第一个串出现,则表示猜中了,相同的猜中猜错都只算一次。在整个匹配的过程中,如果在还没猜错7次之前,第一个串中所有的字符都被猜完了, 则输出“You win.”,如果你还没全部猜完的时候就已经猜错7次,则输出“You lose.”,其他则输出“You chickened out.”。

#include<stdio.h>//uva489 
#include<string.h>
#include<iostream>//Hangman Judge
#define N 100000+10
int letter[28],b[28];
char s1[N],s2[N];

int main(){
    int len1,cnt,len2,n;while(scanf("%d",&n)!= EOF){
        if(n == -1)break;
        getchar(); 
        fgets(s1,N,stdin);len1= strlen(s1);
        fgets(s2,N,stdin);len2= strlen(s2);
        int a1 =0,a2 =0,cnt2=0;cnt =0;
        memset(letter,0,sizeof(letter));
        memset(b,0,sizeof(b));

        for(int i=0; i< len1-1 ;i++) 
            {a1=s1[i]-'a'+1;
            letter[ a1 ] =1 ;b[ a1 ] =1;}
    
        for(int i=1;i < 27;i++)
            {
                if(letter[i] > 0)    cnt++;
            }

        a1=0;int flag =0;
    
        for(int i=0 ; i < len2-1 ;i++)
        {
            int id = s2[i] - 'a'+1;
            if(letter[id] == 1) {a1++;letter[id]=2;}
            if(b[id] == 0 ){a2++;b[id]=1;}
            if(a1 >= cnt && a2 < 7) {break; flag=1;}
            if( a2 > 6){break;flag=2;}
        }printf("Round %d\n", n);
        if( flag == 1 || (a2<7 && a1>=cnt))printf("You win.\n");
        else if( flag == 2 || a2>6)  printf("You lose.\n");
        else            printf("You chickened out.\n");
    }return 0;
} 
View Code

 

posted @ 2018-10-21 21:13  163467  阅读(155)  评论(0编辑  收藏  举报