AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 0. Getting Started
490 - Rotating Sentences
题:把输入90度旋转。如下所示:
abcd
efg
转化为
ea
fb
gc
d
解:
1)获取每一行输入字符串,存入vector,并且获得最长字符串长度len
2)从0到len-1遍历,输出字符串的对应位置的字符
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
using namespace std;
int main(){
string line;
vector<string> vec;
int len =0;
while(getline(cin,line)){
vec.push_back(line);
len = (line.size()>len)?line.size():len;
}
vector<string>::reverse_iterator vit;
for(int i=0;i<len;i++){
for(vit=vec.rbegin();vit!=vec.rend();vit++){
if((*vit).size()>i){
cout<<(*vit)[i];
}else{
printf(" ");
}
}
printf("\n");
}
return 0;
}
445 - Marvelous Mazes
题:输入转换后输出。遇到'!'和换行符换行,数字代表它之后的字母输出的次数,字母‘b’表示空格。多个数字连续出现,输出次数为它们之和。解:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 1001
int main(){
char *line[MAX];
char c;
int i,num=0;
while((c=getchar())!=EOF){
if(c=='\n'||c=='!'){
printf("\n");
continue;
}
if(isdigit(c)){
num+= c-'0';
}else{
for(i=0;i<num;i++){
if(c=='b')
printf(" ");
else
printf("%c",c);
}
num=0;
}
}
return 0;
}
489 - Hangman Judge
题:猜单词(字母)。输入一个单词,猜这个单词有哪些字母(同一字母多次出现,猜中一次即全中)。猜错七次以上lose。猜对获胜。否则算chickened out。解:设int[26]数组,表示字母是否猜中。遍历输入单词,对字母的相应位置1,并统计不同字母数。读入猜测,如字母猜中,则猜中数+1,否则猜错数+1。
#include <stdio.h>
int main(){
int ch[26];
char word[1000];
char guess[1000];
int a,i=0;
while(1){
int num =0,wrong=0,out=0;
scanf("%d",&a);
if(a==-1)
return 0;
printf("Round %d\n",a);
scanf("%s",word);
scanf("%s",guess);
for(i=0;word[i]!='\0';i++){
if(ch[word[i]-'a']==0){
ch[word[i]-'a']=1;
num++;
}
}
for(i=0;guess[i]!='\0';i++){
if(ch[guess[i]-'a']==1){
ch[guess[i]-'a']=0;
num--;
}else{
wrong++;
}
if(num==0){
printf("You win.\n");
out =1;
break;
}
if(wrong==7){
printf("You lose.\n");
out =1;
break;
}
}
if(out ==0) printf("You chickened out.\n");
memset(ch,0,sizeof(ch));
}
return 0;
}
本文提供了三道ACM编程竞赛题目的详细解答过程,包括矩阵旋转、迷宫输入转换及猜单词游戏,涵盖字符串处理、算法实现等方面。
&spm=1001.2101.3001.5002&articleId=7823699&d=1&t=3&u=c0ab45bab8ae404ba31fab46d026ae81)
428

被折叠的 条评论
为什么被折叠?



