前提・実現したいこと
https://beta.atcoder.jp/contests/abc098/tasks/abc098_b
この問題です。
方針は、入力した文字列sを、区切り文字の前と後でそれぞれsa,sbに
分けて、myJudge関数に渡して、それぞれにaからzまでの各文字が
含まれるかを判定して、どちらにもそのアルファベットが含まれた場合のみ
共通の文字があるとしてカウントしていって〜というものです。
発生している問題・エラーメッセージ
発生している問題:aab|bcaの時にa,bが共通で、myJudge関数の 戻り値が2のはずなのに、printfすると1になっていること。 エラーメッセージはありません。
該当のソースコード
c
1#include<stdio.h> 2 3int myJudge(char *sa, char *sb); 4 5int main(void) 6{ 7 char s[100+1]={0}; 8 char sa[100+1]={0}; 9 char sb[100+1]={0}; 10 int n=0; 11 int ans=0; 12 int i=0; 13 int k=0; 14 int j=0; 15 int max=0; 16 17 scanf("%d", &n); 18 scanf("%s", s); 19 20 //kは仕切りの位置を表していて 21 //[i]と[i+1]の間にあるときk=iとしています 22 for(k=0; k<=n-2; k++){ 23 24 i=0; 25 j=0; 26 27 //saに入れる 28 while(i!=k+1){ 29 sa[i] = s[i]; 30 i++; 31 } 32 sa[i] = '\0'; 33 printf("sa:%s\n", sa); 34 //sbに入れる 35 while(i<=n-1){ 36 sb[j] = s[i]; 37 i++; 38 j++; 39 } 40 sb[j] = '\0'; 41 printf("sb:%s\n", sb); 42 43 ans = myJudge(sa, sb); 44 printf("ans:%d\n", ans); 45 46 if(ans > max){ 47 max = ans; 48 } 49 50 51 } 52 printf("%d\n", max); 53 54 return 0; 55} 56 57//aからzの文字を一つずつ、saとsbの両方に含まれるか判定する関数 58int myJudge(char *sa, char *sb) 59{ 60 char c; 61 int cnt=0; 62 int ans1=0,ans2=0; 63 64 for(c='a'; c<='z'; c++){ 65 ans1=0,ans2=0; 66 67 while(*sa != '\0'){ 68 if(*sa == c){ 69 ans1 = 1; 70 break; 71 } 72 sa = sa + 1; 73 } 74 while(*sb != '\0'){ 75 if(*sb == c){ 76 ans2 = 1; 77 break; 78 } 79 sb = sb + 1; 80 } 81 if(ans1==1 && ans2==1) 82 cnt++; 83 84 } 85 86 return cnt; 87} 88
試したこと
配列をsa,sbに分けれてるか、関数の戻り値の確認等
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/28 23:34
2018/05/28 23:48
退会済みユーザー
2018/05/29 04:22