• 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
    ",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
    ",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
    ",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
    ",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
    ",ans-min*n );
        }
        return 0;
    }
    View Code

    uva490  “Rotating Sentences,”

    优秀的字符串水题 

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

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

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

      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("%[^
    ]",&s[tot]) ){
            len = strlen(s[tot]);
            //if(len == 0) break;
            if(len > minu) minu = len;
            i++;cnt++;
            //printf("%s
    ", 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("
    ");
        }
        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] == '
    ')
                s[tot][len-1] = '';
            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("
    ");
        }
        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("
    ");
            for(int i =0; i< len;i++){
                if(s[i] == '!'){
                    printf("
    ");
                    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("
    ");
            }
        }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("
    ");
                }
                for(int i=1;i <= a;i++)
                    printf("%d",a );
                printf("
    ");
                for(int i= a-1;i >= 1; i--)
                {
                    for(int j=i ; j >= 1;j--)
                        printf("%d", i);
                    printf("
    ");
                }if(k < b)printf("
    ");        
            }
            if(n > 0)printf("
    ");//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);
            if( flag == 1 || (a2<7 && a1>=cnt))printf("You win.
    ");
            else if( flag == 2 || a2>6)  printf("You lose.
    ");
            else            printf("You chickened out.
    ");
        }return 0;
    } 
    View Code
  • 相关阅读:
    大话数据结构笔记
    zsh安装教程
    Matlab安装教程
    7-16 插入排序还是归并排序 (25 分)
    7-14 插入排序还是堆排序 (25 分)
    7-14 二叉搜索树的最近公共祖先 (30 分)
    7-11 笛卡尔树 (25 分)
    中缀转换为后缀和前缀
    7-15 水果忍者 (30 分)
    兔子的区间密码(思维)
  • 原文地址:https://www.cnblogs.com/163467wyj/p/9153406.html
Copyright © 2020-2023  润新知