AtCoder Beginner Contest 049 by C
AtCoder Beginner Contest 049 について
C言語での回答
できたもの
A
B
できなかったもの
C
D
問題A
#include <stdio.h> int main(void){ char c; scanf("%c", &c); if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){ printf("vowel"); } else{ printf("consonant"); } return 0; }
1文字だけなのでフォーマット識別子が%cであることに注意。
問題B
#include <stdio.h> int main(void){ int h,w,i,j; char c[101][101]; char symbol; scanf("%d %d", &h, &w); for(i=0;i<h;i++){ scanf("%s", c[i]); } for(i=0;i<h;i++){ for(j=0;j<w;j++){ printf("%c", c[i][j]); } printf("\n"); for(j=0;j<w;j++){ printf("%c", c[i][j]); } printf("\n"); } return 0; }
記号を入出力するのに手間取りました。
2次元配列に1文字ずつ入出力することで成功。
入力時は%sだけど出力時は1文字ずつなので%c
改行位置に注意。1行出力ごとなのでjのfor文が終わってから\nを入れます。
問題C
dream/dreamer/erase/eraserのならびのみがあればOKだと逐次チェック法をしようとしたけどdream/er、erase/rの分岐がうまくいかず。
時間内に解けませんでした。
#include <stdio.h> #include <string.h> int main(void){ int i; char s[100001]; scanf("%s", s); int n = strlen(s); int count = 0; for(i=0;i<n;i++){ if(s[i]=='d'&&s[i+1]=='r'&&s[i+2]=='e'&&s[i+3]=='a'&&s[i+4]=='m'){ if(s[i+5]=='e'&&s[i+6]=='r'&&s[i+7]!='a'){ i = i+6; } else{ i = i+4; } } else if(s[i]=='e'&&s[i+1]=='r'&&s[i+2]=='a'&&s[i+3]=='s'&&s[i+4]=='e'){ if(s[i+5]=='r'){ i = i+5; } else{ i = i+4; } } else{ count++; } } if(count==0){ printf("YES"); } else{ printf("NO"); } return 0; }
解けなかった原因
・ループ時のカウント(i=の値)がうまくできていなかった(方針自体はよかった)
問題D
まだ