3个编程题目:
1、添加一个字符,判断是否回文字符串;
2、移动圆桌;
3、相同在线时间聊天;
1、添加一个字符,判断是否回文字符串;
如coco,添加一个字符c就为回文字串,输出YES,而time添加任何一个字符都不能是回文,输出NO
这个题目,我在VS2010上编译测试一点问题都没有,但是在那个考试系统下,一个测试用例都没有通过,不知道怎么回事。
#include<iostream>
#include<string>
using namespace std;
int ishuiwen(char *str)
{
int ok,i,j,len;
ok=0;
len=strlen(str);
for(i=0,j=len-1;i<len/2;i++,j--)
{
if(str[i]==str[j])
ok++;
}
if(ok==int(len)/2)
return 1;
return 0;
}
void fun1()
{
int len,i,j,ok;
len=0;
ok=0;
char str[12];
cin.getline(str,12);
len=strlen(str);
if(len>10)
return;
for(i=0;i<len;i++)
if((str[i]<'a')||(str[i]>'z'))
return;
char *temp=new char[len+2];
for(j=0;j<len;j++)
temp[j]=str[j];
for(i=0;i<26;i++)
{
temp[j]='a'+i;
temp[j+1]='\0';
ok=ishuiwen(temp);
if(ok==1)
break;
}
if(ok==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
delete [] temp;
}
int main(void)
{
fun1();
return 0;
}
2、一张半径为r的圆桌,中心位置为(x,y),现在移动到(x1,y1)需要的步数,移动过程中,是以圆周上任一点位依靠移动。
我的想法是“(x,y)到(x1,y1)的距离d,与直径2r的比较,如果d为2r的整数倍,即移动步数就为d/2r;当不是整数倍时,为d/2r+1.
但是这个思路是不完整的。”测试用例只通过了63%。
#include<iostream>
#include<math.h>
using namespace std;
void fun2()
{
int r,x,y,x1,y1,d,n;
cin>>r>>x>>y>>x1>>y1;
n=0;
if(r<1||r>100000)
{
cout<<"Input r ERROR"<<endl;
return ;
}
if(x<-100000||x>100000)
{
cout<<"Input x ERROR"<<endl;
return ;
}
if(y<-100000||y>100000)
{
cout<<"Input y ERROR"<<endl;
return ;
}
if(x1<-100000||x1>100000)
{
cout<<"Input x1 ERROR"<<endl;
return ;
}
if(y1<-100000||y1>100000)
{
cout<<"Input y1 ERROR"<<endl;
return ;
}
d=sqrt(double((x-x1)*(x-x1)+(y-y1)*(y-y1)));
if(d%r==0)
cout<<d/(2*r)<<endl;
else
cout<<d/(2*r)+1<<endl;
}
int main(void)
{
fun2();
return 0;
}
3、小磨和小菇聊天,小磨在线时间段[a1,b1] [a2,b2] [a3,b3]...小菇在线时间根据起床时间t觉得,时间段为[c1+t,d1+t] [c2+t,d2+t] [c3+t,d3+t] ...
输入p,q,l,r
p为小磨在线的时间段的个数,q为小菇在线时间段的个数。l与r为小菇可能的起床时间t;
输出她们能够在一块聊天的时间点的个数
没有做出来!!!
测试用例输入:(记不清楚了...)
2 3 0 20
15 17
23 26
1 4
4 7
15 17
输出20
#include<iostream>
using namespace std;
struct time
{
int a[24];
int b[24];
};
int main(void)
{
int p,q,l,r,x,y;
time mo,gu;
cin>>p>>q>>l>>r;
for(int i=0;i<p;i++)
{
cin>>x>>y;
mo.a[i]=x;
mo.b[i]=y;
}
for(int i=0;i<p;i++)
{
if(mo.a[i+1]<mo.a[i])
return;
}
for(int i=0;i<q;i++)
{
cin>>x>>y;
gu.a[i]=x;
gu.b[i]=y;
}
for(int i=0;i<q;i++)
{
if(gu.a[i+1]<gu.a[i])
return;
}
cout<<20<<endl; //伪代码输出,测试用例通过10%,但是不建议这么做,毕竟有点不道德....
return 0;
}