牛客练习赛86 A,B题解

题目传送门

A

思路

简单博弈题,谁先面对1谁就输,因为面对1的时候只能划掉1。那么每个人每次优先划掉因数1,如果是奇数显然Bob赢,偶数Alice赢。
这道题证明我也不太清楚,猜了下结果

代码

#include<bits/stdc++.h>

using namespace std;

int main()
{
	
	
	int n;
	cin>>n;
	if(n&1) puts("Bob");
	else puts("Alice");
	
	return 0;
 } 

B

思路

这道题k只有3种情况0,1,2,N最大为100,那么就简单了
如果k=0,直接输出1~100
如果k=1,我们输出x0x的形式,x+0=x。x取2到101,但是注意有点坑点,当x为11的倍数的时候特殊处理,可以处理为xx(x+x)
如果k=2, 我们可以采取这样的做法,前面是x个i,把这x个i分成1个和x-1个i,后面是x-1位i加上个位i。详情见代码

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
	
	int k,n;
	cin>>k>>n; 
	
			if(k==0)
	{
		for(int i=1; i<=n; i++)
		{
			printf("%d\n",i);
		}
	}
	else if(k==1)
	{
		for(int i=1; i<=n; i++)
		{
			if(i%11==0) printf("%d%d%d\n",i,i,i+i);
			else printf("%d0%d\n",i,i);
			
		}
	}
	else
	{
		int cnt=0;
		bool flag=false;
		//i的范围为1到9 
		for(int i=1; i<=9; i++)
		{
			//多少个i 
			//9*14>100, 可以给出正确答案 
			for(int j=3; j<=14; j++)
			{

					ll sum=0;
					for(int k=1; k<=j; k++) 
					{
						printf("%d",i);
						if(k>1) sum=sum*10+i;
					}
					sum+=i;
					printf("%lld\n",sum);
					cnt++;
					if(cnt==n) 
					{
						flag=true;
						break;
					}
			}
			if(flag) break;
		}
	}


	
	return 0;
 } 
posted @ 2022-08-28 08:43  翔村亲亲鸟  阅读(10)  评论(0编辑  收藏  举报