前提
C言語で
「長さが奇数 N の文字列 S が与えられる.S の各文字は英大文字である.
IOI 文字列とは次の条件をすべて満たす文字列である.
長さが奇数である.
各文字は I または O で,これらが交互に連なる.
1 文字目は I である.
例えば,I,IOI,IOIOIOI は IOI 文字列であるが,JOI,IIOOII,OIOIO は IOI 文字列ではない.
あなたは次の操作を 0 回以上繰り返すことができる.
文字列 S の文字を 1 つ選び,好きな英大文字に変更する.
文字列 S を IOI 文字列にするのに必要な操作の回数の最小値を求めよ」
という問題を解いています。
下のようなコードを書いたのですが、実行しても正しい値が出ません。
どこがダメなのか教えてほしいです。
該当のソースコード
C
1#include <stdio.h> 2 3int main(void) 4{ int a, b, n, ans; 5 a=0; 6 b=0; 7 scanf("%d",&n); 8 int s[n]; 9 10 while(a == n){ 11 scanf("%d",&s[a]); 12 a++; 13 }; 14 while(b == n){ 15 b++; 16 if(n%2) 17 if(s[b] != 'I') 18 ans++; 19 else{ 20 if(s[b] != 'O') 21 ans++; 22 } 23 }; 24 printf("%d",ans); 25 return 0; 26}
> int s[n];
s は文字列なんですよね? なんでint配列なんですか?
全体的におかしいのですが例えばwhile(a == n)はどういう処理を期待していますか?
プログラムに落とし込む前に日本語で答えを出す手順を説明していただけますか?
どのような入力によってどのような出力を期待してどのような出力だったのか、また、その入力の場合コードのどの個所でどの変数がどのような値になるはずがどんな値だったのか等、ご自身で調査した結果をご提示ください。
もしその問題がどこかネット上で公開されているものでしたら、その URL を教えてください。入力が偶数だった場合等、不明な点があります。
タイトルがダメです。
次の質問も「この問題が解けないです」ですか?
それでは、この質問と区別が付きません。
「IOI文字列」などの適切なタイトルに変更してください。
質問は編集できます。
回答1件
あなたの回答
tips
プレビュー