一道很简单的C语言题。。。我的答案正确却不能AC

#include<stdio.h>#include<math.h>voidmain(){intn,i,j,d;chara[1000],b[1000];while(scan... #include<stdio.h>
#include<math.h>
void main()
{
int n,i,j,d;
char a[1000],b[1000];
while(scanf("%d",&n)!=EOF)
{
scanf("%s %s",a,b);
for(i=0,j=n-1;i<n,j>=0;i++,j--)
{
if(a[i]-'0'==b[j]-'0')
d=1;
else
{
d=0;
break;
}
}
if(d!=0)
{
printf("Yes.\n");
for(i=0;i<n;i++)
printf("in\n");
for(i=0;i<n;i++)
printf("out\n");
printf("FINISH\n");
}

else
{
printf("No.\n");
printf("FINISH\n");
}

}
}
以下是题目。。英文的。。希望高手不要嫌麻烦。。本人小白。请帮帮我吧
汗。摆渡吃连结?题目:http://acm.hdu.edu.cn/showproblem.php?pid=1022
杭电OJ题号1022
展开
 我来答
宁波祝老师
2008-11-20 · TA获得超过849个赞
知道小有建树答主
回答量:455
采纳率:100%
帮助的人:285万
展开全部
这题没你想想那么简单,要用栈来做的
输入 4 1234 1342
你的程序 输出是no,应该是yes的
in
out
in
in
out
in
out
out
程序的思路就是错的。。。。。。
这是一份AC的C++代码,应该可以看懂 ,楼主可以仿照这个用C 写下

#include <iostream>
#include <string>
using namespace std;

const int Max=100;

int Locate(char array[],char num,int low,int high)
{
for(; array[low]!=num && low<=high ;low++);
if(array[low]!=num)
return -1;
else
return low;
}

int main()
{
int loc,n,i,j,step;
char order1[Max],order2[Max],station[10];
int run[Max];
int top,po1;
bool flag;

while(cin>>n)
{
cin>>order1;
cin>>order2;

memset(station,0,sizeof(station));
top=po1=step=0;
flag=true;
for(i=0;i<n;i++)
{
loc=Locate(station,order2[i],0,top); //在车站的位置
if(loc<0)
{
loc=Locate(order1,order2[i],po1,n); //在进入队列的位置
if(loc<0)
{ flag=false;break;}
else
{
for(; po1<loc && top<=9 ; po1++,top++,step++)
{
station[top]=order1[po1];
run[step]=1;
}
po1=loc+1; // 出栈本元素
run[step++]=1;
run[step++]=0;
}//if
}
else
{
if(loc==top-1)
{
run[step++]=0;
top--;station[top]=0;
}
else
{ flag=false;break;}
}
}//for

if(flag)
{
cout<<"Yes.\n";
for(i=0;i<step;i++)
if(run[i])
cout<<"in\n";
else
cout<<"out\n";
}
else
cout<<"No.\n";
cout<<"FINISH\n";
}
return 0;
}
zhangna_307
2008-11-21 · TA获得超过566个赞
知道小有建树答主
回答量:634
采纳率:0%
帮助的人:163万
展开全部
题目呢?还有AC的错误是什么?
哇噻!!!竟然也是杭电的!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张天141013
2008-11-20
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
告诉我帮你什么 好不好啊 很简单的一道题啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d7c6a8e05
2008-11-20 · TA获得超过150个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:204万
展开全部
看不到题目呀?
给发个题目链接吧
哪个oj?题号?

这个应该是一个模拟栈的题目。 一般都用回溯法。鉴于这个题目比较简单,简单循环就可以了
以下是我刚刚AC的程序:
#include <iostream>
using namespace std;

int main()
{
int n, i, j, k, t, a[100], len;
char s[20], s1[20], s2[20];
while( scanf("%d", &n) != -1)
{
scanf("%s%s", s1, s2);
len = strlen(s1);
if( len != strlen(s2) )
{
printf("No.\nFINISH\n");
continue;
}

k = -1;
for(i=j=t=0; i<len; i++)
{
s[++k] = s1[i];
a[t++] = 0;
while( k >= 0 && j < len && s[k] == s2[j])
{
k--;
j++;
a[t++] = 1;
}
}
if( j != len )
{
printf("No.\nFINISH\n");
continue;
}
else
{
printf("Yes.\n");
for(i=0; i<t; i++)
{
if( a[i] == 0 ) printf("in\n");
else printf("out\n");
}
printf("FINISH\n");
}
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百吨啤酒
2008-11-20
知道答主
回答量:97
采纳率:0%
帮助的人:33.6万
展开全部
题目被百度吃掉了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
winds504
2008-11-20 · TA获得超过374个赞
知道小有建树答主
回答量:283
采纳率:100%
帮助的人:370万
展开全部
你的思路是所有车进站后再依次出站才是正确的,这是不完整的,还可能进了两辆,出了一辆,又来了第三辆,再全部出去。这道题应该用栈来做,可参考如下代码:
void main()
{
int n,i,j,d;
char a[1000],b[1000];
char c[1000]; //新增一数组,用来模拟栈
int k;//表示栈的长度
while(scanf("%d",&n)!=EOF)
{
scanf("%s %s",a,b);
for(i=0,j=0,k=0;;)
{
if(i>=n)break;//若已全部入栈则退出
if(k==0 || c[k-1]!=b[j])//栈空或没轮到出栈(就是即将出栈的车不是栈中最后一辆)
c[k++]=a[i++];//入栈
for(;k>0 && c[k-1]==b[j];)//将可出栈的全部出栈
{
k--;j++;//出栈
}
}
if(k==0)//栈空,即已全部出栈,表示正确
{
printf("Yes.\n");
for(i=0,j=0,k=0;;)//再按上面的思路走一遍,增加printf语句
{
if(i>=n)break;
if(k==0 || c[k-1]!=b[j])
{
c[k++]=a[i++];
printf("in\n");
}
for(;k>0 && c[k-1]==b[j];)
{
k--;j++;
printf("out\n");
}
}
printf("FINISH\n");
}

else
{
printf("No.\n");
printf("FINISH\n");
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式