一道很简单的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 展开
#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 展开
展开全部
这题没你想想那么简单,要用栈来做的
输入 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;
}
输入 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;
}
展开全部
题目呢?还有AC的错误是什么?
哇噻!!!竟然也是杭电的!!!
哇噻!!!竟然也是杭电的!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
告诉我帮你什么 好不好啊 很简单的一道题啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看不到题目呀?
给发个题目链接吧
哪个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;
}
给发个题目链接吧
哪个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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的思路是所有车进站后再依次出站才是正确的,这是不完整的,还可能进了两辆,出了一辆,又来了第三辆,再全部出去。这道题应该用栈来做,可参考如下代码:
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");
}
}
}
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");
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询