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 }
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; }
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; }
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; }
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; }
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; }