回文判断 移动圆桌 同时在线时间聊天

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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值