独一无② 发表于 2015-12-13 14:47:43

acm 英文题,

题目名称:All in All
题目就不原模原样写了,大概意思是 输入二个字符串,从第二个字符串中删掉一些字符 等于前面那个字符,输出 yes,否则输出no.
样例:
sequencesubsequence
personcompression
VERDIvivaVittorioEmanueleReDiItalia
caseDoesMatterCaseDoesMatter
输出:
Yes
No
Yes
No

题目不知道有没有理解错,应该没错。
我提交,显示 30%错误。不知哪里没有考虑全。
代码:
# include <stdio.h>
# include <string.h>
int main()
{
        char a,b,i,j,k,num;
        while(scanf("%s",&a) != EOF && scanf("%s",&b) != EOF)
        {
                i=0;num=0;
                for(j=0;a != '\0';j++)
                {
                        for(k=i;b != '\0';k++)
                        {
                                if(a==b)
                                {
                                        i=k+1;
                                        num++;
                                        break;
                                }
                        }
                }
                if(strlen(a) == num)
                   printf("Yes\n");
      else
         printf("No\n");
        }
}

求 大神指教~~~:hug: :hug:

HHR 发表于 2015-12-13 14:47:44

思路应该是挺清晰的,遍历第二个字符串,逐字符匹配第一个字符串。下面的代码用了Java,不知道能看懂不。
        public static void main(String[] args) {
                System.out.println("please enter two string split the space");
                Scanner in = new Scanner(System.in);
                String string = in.nextLine();
                String str1 = string.split(" ");
                String str2 = string.split(" ");

                int i = 0, j = 0;
                for (; i < str2.length(); i++) {
                        if (str1.charAt(j) == str2.charAt(i)) {
                                j++;
                                if (j >= str1.length()) {
                                        break;
                                }
                        }
                }
                if (j >= str1.length()) {
                        System.out.println("Yes");
                } else {
                        System.out.println("No");
                }
        }

小人 发表于 2015-12-13 16:22:24

本帖最后由 小人 于 2015-12-13 16:36 编辑

看错了{:9_220:}

独一无② 发表于 2015-12-13 16:29:46

小人 发表于 2015-12-13 16:22
VERDIvivaVittorioEmanueleReDiItalia
caseDoesMatterCaseDoesMatter
按照 这两个 栗子 看就是   ...

是 区分 大小写的,VERDI   vivaVittorioEmanueleReDiItalia。。。。这个后面 那个字符串中 也是有前面那个大写字母的, 最后一个 因为首字母 没有匹配,所以输出 no

小人 发表于 2015-12-13 16:34:07

独一无② 发表于 2015-12-13 16:29
是 区分 大小写的,VERDI   vivaVittorioEmanueleReDiItalia。。。。这个后面 那个字符串中 也是有前面那 ...

我好像看错了{:9_240:}不好意思

独一无② 发表于 2015-12-13 16:50:48

小人 发表于 2015-12-13 16:34
我好像看错了不好意思

大神,我想不出 有什么 特殊例子了。 还有一个疑问会不会是 scanf 的问题,要用gets,但是用 gets 不知道该如何写,二个 字符串 用空格隔开的,gets 会记录到 一个字符串 中。

小人 发表于 2015-12-13 17:10:24

独一无② 发表于 2015-12-13 16:50
大神,我想不出 有什么 特殊例子了。 还有一个疑问会不会是 scanf 的问题,要用gets,但是用 gets 不知 ...

acm 的题 我不会哎{:9_240:}

独一无② 发表于 2015-12-13 17:13:29

小人 发表于 2015-12-13 17:10
acm 的题 我不会哎

好吧,谢谢啦~~

独一无② 发表于 2015-12-14 16:42:32

HHR 发表于 2015-12-14 01:12
思路应该是挺清晰的,遍历第二个字符串,逐字符匹配第一个字符串。下面的代码用了Java,不知道能看懂不。

谢谢了~ 我 java没学。就采纳了把~~

gpedit.m 发表于 2015-12-15 11:07:35

《scanf_s》需要加入个_s
页: [1]
查看完整版本: acm 英文题,