質問のコードは変数の型と値が完全におかしいのでダメです。
次のように書けば、入力文字列を受理できるかどうか判定できると思います。
C
1#include <stdio.h>
2
3int automaton(const char *s)
4{
5 int m = 0, n = 0, i = 0;
6 for (; s[i] == 'a'; i++) m++;
7 for (; s[i] == 'b'; i++) n++;
8 return s[i] == '\0' && m > n && n > 0;
9}
10
11int main(void)
12{
13 char s[100];
14 while (printf(">> "), scanf("%99s", s) == 1)
15 puts(automaton(s) ? "YES" : "NO");
16}
実行例
test
1$ ./a.out
2>> a
3NO
4>> b
5NO
6>> aa
7NO
8>> ab
9NO
10>> ba
11NO
12>> bb
13NO
14>> aaa
15NO
16>> aab
17YES
18>> abb
19NO
20>> aba
21NO
22>> baa
23NO
24>> aaab
25YES
26>> ^D
27$
追記
状態変数 s と状態 { p, q, d } で有限オートマトン風に書き直してみました。
C
1#include <stdio.h>
2
3enum { p = 0, q = 1, d = -1 };
4
5int automaton(const char *str)
6{
7 int s = p, c;
8 while (s != d && (c = *str++))
9 if (s == p && c == 'a') s = q;
10 else if (s == p && c == 'b') s = d;
11 else if (s == q && c == 'a') s++;
12 else if (s == q && c == 'b') s = d;
13 else if (s > q && c == 'a') s++;
14 else if (s > q && c == 'b') s = -s;
15 else if (s < d && c == 'a') s = d;
16 else if (s < d && c == 'b') s++;
17 return s < d;
18}
19
20int main(void)
21{
22 char s[100];
23 while (printf(">> "), scanf("%99s", s) == 1)
24 puts(automaton(s) ? "YES" : "NO");
25}
しかし、状態は { p, q, d, >q, <d } であり、
q より大きい数は無数にあるので、 これを有限状態とは言えません。
追記2
例えばaaabだとしたらYESと表示され、
bbaとかだとNOと表示されるプログラムです。
私はこれを読み違えて、aaab は YES、abb は NO と書かれているものだと
信じ込んでいました。
だから、m > n という条件を勝手に想定していました。
そして、それは有限オートマトンにはなりえないと言ってしまいました。
m > 0 かつ n > 0 という条件があるだけで m と n の大小が無関係なら
それは "a+b+" または "aabb" という正規表現で表せるので、
4つの状態を持つ有限オートマトンになります。
質問のコードを修正するとすれば、
C
1#include <stdio.h>
2
3#define p 0
4#define q 1
5#define r 2
6#define d 3
7
8int main(void)
9{
10 int s = p, c;
11 char str[30];
12 scanf("%s", str);
13 for (int i = 0; c = str[i]; i++) {
14 if (s == p && c == 'a') s = q;
15 else if (s == p && c == 'b') s = d;
16 else if (s == q && c == 'a') s = q;
17 else if (s == q && c == 'b') s = r;
18 else if (s == r && c == 'a') s = d;
19 else if (s == r && c == 'b') s = r;
20 else if (s == d && c == 'a') s = d;
21 else if (s == d && c == 'b') s = d;
22 }
23 if (s == r)
24 puts("Yes");
25 else
26 puts("No");
27}