一道简单的C语言题。

#include<stdio.h>
#include<string.h>
void main()
{
char a[100024],b[100024];
int t,i,j,k1,k2,p,q;
while(scanf("%s %s",a,b)!=EOF)
{
t=0;
k1=strlen(a);
k2=strlen(b);
if(k2>=k1)
{
printf("no\n");
continue;
}
else
{
for(i=0;i<k2;i++)
{
for(j=0;j<k1;j++)
{
if(b[i]==a[j])
{
t+=1;
for(p=j;p<k1;p++)
a[p]=a[p+1];
k1-=1;
break;
}
}
}
if(t==k2)
printf("yes\n");
else
printf("no\n");
}
}
}
我的代码
问题

亲和串
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 402 Accepted Submission(s): 174

Problem Description
人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。

Input
本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。

Output
如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。

Sample Input
AABCD
CDAA
ASD
ASDF

Sample Output
yes
no

Author
Eddy

Recommend
lcy
题目地址WR
http://acm.hdu.edu.cn/showproblem.php?pid=2203
#include"stdio.h"
#include"string.h"
char s1[100001],s2[100001],s3[100001];
void main()
{
while(gets(s1))
{
gets(s2);
strcpy(s3,s1);
strcat(s1,s3);
if(strstr(s1,s2))printf("yes\n");
else printf("no\n");
}
}
这个是别人的AC代码。也是一次一次判断的啊

我想只给你说一下方法,这个输入输出来看.题目的要求是要输入几行后,一起做判断.
Sample Input
AABCD
CDAA
ASD
ASDF

Sample Output
yes
no
它这是输入两对数据后,做出判断.也可以输入3对,4对后再做判断.这就需要用二维字符数组来存取输入内容.然后再一起做出判断.

你的程序能一个一个的作出判断,说明判断没有问题,只是你没有一起作出判断.
你再好好改进一下你的程序吧,对于你来说会不难的

那你想问的是什么呢,你的程序没有什么问题啊.能一次次的判断,但看题目,好像是要一起判断的吧.你再好好看看题目吧.

你还是把问题提得清楚一些,让高手们来给你解决啊.你问题也不明确啊.
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-21
貌似你的程序没有实现s1的循环移位,利用系统的子串拼接函数strchr(),把s1连接到s1之后,即实现s1和s1的拼接。然后再判断吧。具体程序我没试。本回答被提问者采纳
第2个回答  2008-12-22
这个题目,我还没做呢。

一道简单的C语言题
B、D就是++i,i++区别了。选项C为 ptr->i =*(ptr->i) \/\/错误 选项D ++ptr->i = ++(ptr->i)

一道简单的c语言题~~~要的不只是答案。(5)
C 因为是按照字符型输入的,空格也算。a是1 b是2 c是空格 d是3

很简单的C语言题
解析C语言题目的关键在于理解运算符的优先级和运算规则。给定问题:找出正确的表达式计算结果为2。首先,需要明确题目中的操作符“%”表示取余运算,“\/”表示除法运算。选项D为:a % 7除以5余2。我们可以将这个表达式拆分为两部分:a % 7 和 除以5余2。1. a % 7:此表达式的结果为a除以7的余...

一道简单的C语言题
答案是输出 2,2,2 分析:看if语句中内容 先j++ || k++ ||逻辑或进行求值时,左面的表达式为真时,不对右面的表达式求值,j是求值后自增,所以进行运算时,k++不进行运算。故j变为2, k不变,仍然为2,后面&&i++,i求值时为1,求值后自增为2 故if的条件判断为真 下面输出i,j,k的值为...

一道C语言很简单的题目,懂C语言的进来帮忙解下
首先要知道? :这是一个三目运算符,如 (表达式)? x : y, 意思是说如果表达式是正确的,那么就选择x,如果错误的就选择y。那我们看这里,可以分成三部分(a++<b) ? (a++):(c<d?a++:d)。而后面的(c<d?a++:d)又可以分成三部分(c<d) ? (a++):(d)。我们先看第一个式子...

一道简单的c语言习题,应该选哪个,请说明一下,我是初学者?
选C。字符常量是用单引号括起的,A错 字符常量只能有1个字符,BD错 B中反斜杠+72并不是转义字符,共有3个字符,应为字符串 D中2个字符,应为字符串 C中虽然看上去有4个,但是'\\0x'或'\\0X'加数字是表示十六进制数所代表的字符 ,它是字符型常量 ...

c语言简单问题:若 x=1,y=2,z=3.则表达式 z+=++x+y++的值为多少?求详解...
++x返回值是+1之后的值 x++返回时+1之前的值 所以z=3+(1+1)+2=7 include <stdio.h>#include<cstring>#include<iostream>using namespace std;int main(){ int x=1; int y=2; int z=3; z+=++x+y++; cout<<z<<endl; return 0;} ...

初学C语言,一道简单的题,请高手说一下以下程序的输出结果为多少,先谢谢...
在一行打印三个*然后后面跟8个空格,i是全局变量,主函数时i=5,然后到子函数时,先打印三个*后,i=8,跳出子函数循环,执行printf("\\t");输出8个空格,回到主函数时i=8,跳出主函数循环,程序结束

急!!一个简单的C语言问题!!回答后1小时内必采纳!!!
定义新的类型名称之后,可像基本数据类型那样定义变量。例如:typedef unsigned int COUNT;COUNT c; (这句就等价于unsigned int c)接下来看这道题, A中的v4: B中的v1: C中的v2=int,都不是类型名称。只有D中的int是类型名称。加上空格和v3,意思是定义一种新的类型名v3,和int的结构相同 ...

c语言的一道填空题 很简单
执行顺序从右向左进行。首先,计算表达式a*a,结果为36。此时,a的值被更新为36。接着,执行a=a-36,即36-36,结果为0。因此,a的值变为0。最后,执行a=a+(-30),即0-30,结果为-30。最终,a的值为-30。

相似回答
大家正在搜