训练总结8.1

今天一共做了几道题,做的搜索题 有 棋盘问题,农民追牛问题,还有寻找0和1数字的十进制数字表示n的倍数的问题 。

棋盘问题是给出给定的棋盘大小,还有可以摆放棋子的位置,寻找出多少种摆放的方案,这里有个前提是棋子不能摆在同一行或者同一列。棋盘问题

农民追牛问题,农民追上牛的最少的步数,农民追牛的方式有向前或向后走一步,或者一下到达2*x 这个位置。农民追牛

0和1表示问题,找到一个十进制的数,只有0和1,是n的倍数,这个题主要是发现搜索的方式,从1开始一直 x*10和 x*10+1,一直找到问题的解。0和1

这三道题以前也都是做过的。

 还有下午的练习题,

1.旋转方向问题,有四个方向,给出两个方向,再给出旋转的次数,输出是顺时针旋转的,还是逆时针旋转的。cw顺时针,ccw逆时针  。
用1,2,3,4表示方向,在准备把8个临近的a,b两个点都依次写出来时候,也都发现了规律,将临近的点 划分为两大类,分别是a>b和a<b两类;;还有顺时针逆时针两个都可以的不成立的,发现只要是两个方向不是相邻,肯定是endefinde,所以该开始的限制条件写了两个(方向对角,旋转次数是2的倍数)    只是没有想到限制条件只有旋转次数是2的倍数。

2.守卫问题,看看守卫够不够用。给出一段字母序列,找出每个字母的长度,(记下 这个 字母序列收尾),然后找出整体序列每个点 的每个字母的公共 的个数。

感觉这个题最主要的是找思路,发现自己的思维有点局限,发现思路后代码很好实现。

重点的看看 下午的练习:

旋转方向问题:

Examples
input
^ >
1
output
cw
input
< ^
3
output
ccw
input
^ v
6
output
undefined

Code:

#if 0
#include<bits/stdc++.h>
using namespace std;
int main()
{
	char c,cr;
	int a,b,k;

	cin>>c>>cr>>k;
	
	if(c=='^')
		a=1;
	else 
	if(c=='>')
		a=2;
	else
	if(c=='v')
		a=3;
	else
	if(c=='<')
		a=4;			
    
    if(cr=='^')
		b=1;
	else 
	if(cr=='>')
		b=2;
	else
	if(cr=='v')
		b=3;
	else
	if(cr=='<')
		b=4;	

    if(k%2==0)
     	cout<<"undefined"<<endl;
    else	
    if((a==1&&b==2)||(a==2&&b==3)||(a==3&&b==4)||(a==4&&b==1))
	{
		if(k%4==1)
		cout<<"cw"<<endl;
		else
		if(k%4==3)
			cout<<"ccw"<<endl; 
	
    } 	
    else
    if((a==2&&b==1)||(a==3&&b==2)||(a==4&&b==3)||(a==1&&b==4))
    {
    	if(k%4==1)
    		cout<<"ccw"<<endl;
    	else
    	if(k%4==3)
			cout<<"cw"<<endl;
	
	}

}
#endif


守卫问题:
Examples
Input
5 1
AABBB
Output
NO
Input
5 1
ABABB
Output
YES

#if 0
#include<bits/stdc++.h>
using namespace std;
int ans;
int main()
{
int t[30][2],n,gar,num=0,max=0;

char c[1000006] ;
  cin>>n>>gar;

for(int i=0; i<n; i++)
cin>>c[i];

while(num!=n) 
{
int k1,k2;
char cc; 

for(int i=0; i<n; i++)
{
if(c[i]!='0')
{
cc=c[i];
k1=i;
t[ans++][0]=i;
break;
}
}

for(int i=n-1; i>=0; i--)
{
if(c[i]==cc)
{
k2=i;
t[ans-1][1]=i;
break;
}
}

for(int i=k1; i<=k2; i++)
{
if(c[i]==cc)
{
num++;
c[i]='0';
}
}

}


for(int i=0; i<n; i++)
{ 
int cnt=0;
for(int j=0; j<ans; j++)
{
if(t[j][0]<=i && t[j][1]>=i)
{
cnt++;
}
}

if(cnt>max)
max=cnt;
}

if(max>gar)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;

}
#endif




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值