题目描述
又到了基情四射的夏天,大家出去约妹子,而肥宅辞树只想宅在机房喝肥宅快乐水。辞树一下
子买了n瓶肥宅快乐水。已知他一天里至少喝掉一瓶肥宅水且他是一口干掉一整瓶。(肥宅Orz)
他想要知道自己一共有多少种喝肥宅水的方案。两种方案被认为是不同的,当且仅当辞树买的
这些肥宅水能喝的天数不同,或者存在一天两种方案喝的肥宅水瓶数不同。
输入
第一行输入一个正整数T,代表有T组数据(0 < T < 11) 每组数据有一个正整数n,代表辞树买
了n瓶肥宅快乐水。(0 < n < 108)
输出
对于每组数据,输出一行,将方案数用二进制表示输出。
输入样例
1
3
输出样例
100
提示
3瓶肥宅快乐水的分配方式如下
1 1 1(三天喝完,一天一瓶)
2 1(两天喝完,第一天两瓶,第二天一瓶)
1 2(两天喝完,第一天一瓶,第二天两瓶)
当时找到了规律但是那个按照二进制输出让我S B 了,其实他数出的肯定是二等倍数,2 ->是10 4->100 8->1000以后每一个就 多加个零就完事了。~~~!!!代码
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
int t,n;
int ans ;
int main ()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1)
{
printf("1\n");
}
if(n>=2)
{
ans = pow(2,n-1);
}
printf("1");
for(int i= 1;i<=n-1;i++)
{
printf("0\n");
}
}
return 0;
}
2: 玩游戏
题目描述
zxy和wfy用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子a[i] 。游戏以谁
手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。
zxy和wfy轮流进行,wfy先开始。每回合,玩家从一行的开始或结束处取走整堆石头。这种情况
一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。
假设zxy和wfy都发挥出最佳水平,当zxy赢得比赛时输出“zxy”,当wfy赢得比赛时输出“wfy”。
输入
有T组输入,每个输入后有一个n,在n后有n个数字,a1; a2::::an。
n的范围是 1<=n<=1e5
1 <=a<=1e5
输出
输出胜利者的名字"zxy"或者"wfy"
输入样例
1
4
5 3 4 5
输出
输出样例
wfy
提示
wfy先开始,只能拿前5 颗或后5 颗石子。
假设他取了前5 颗,这一行就变成了[3,4,5] 。
如果zxy拿走前3 颗,那么剩下的是[4,5],wfy拿走后5 颗赢得10 分。
如果zxy拿走后5 颗,那么剩下的是[3,4],wfy拿走后4 颗赢得9 分。
这表明,取前5 颗石子对wfy来说是一个胜利的举动,所以我们输出wfy 。
这个题就是个骚题,其实不管怎么弄,都是wfy赢了,因为他先拿,肯定拿多的
所以不管输入什么就数出wfy 就行了
#include<iostream>
#include<cstdio>
#define LL long long
using namespace std;
int t;
int n;
int a[maxn];
int main ()
{
scanf("%d",&t);
while(t--)
{
int zxy = 0;
scanf("%d",&n);
for(int i =1;i<=n;i++)
{
scanf("%d",&a[i]);
}
printf("wfy");
}
return 0;
}
H 真。签到题
题目描述
A国的n个作战通信基站大部分被C国的特种部队破坏,基站编号1到n,只剩下编号为a和b的通信
基站完好,为了快速恢复通信,A国派出zzx和fk两位工程师去修复,A国的通信基站有一个特殊
隐蔽的备用系统,只有让两个完好的通信基站向编号为x的基站发送信号,x是这两个完好基站
编号的和或者差的绝对值,该被破坏的基站的备用系统才会被激活,工程师才能恢复被破坏的
基站,假设zzx工程师先到达可修复的基站进行修复,接着fk去修复下一个,两人轮流修复,问
谁会修复最后一个可修复的基站
输入
输入n,a,b三个整数,代表基站的总数n和剩下的完好的两个基站的编号a,b;
1 < n <= 1e5
1 <= a; b <= n
处理到文件结束
输出
若zzx修复最后一个,输出zzx,否则输出fk
输入样例
5 1 4
10 3 7
输出样例
zzx
fk
这个题他其实要求一个GCD 因为如果a和b的GCD为1的话他们互质, 两个数又能相加又能相减
这样他们就能修完所有的基站;
#include<cstdio>
int n,b,a;
int v;
int gcd(int x,int y)
{
if(!x||!y)
{
return x>y?x:y;
}
for(int t;t = x%y,t;x= y,y = t);
return y;
}
int main ()
{
while(scanf("%d%d%d",&n,&a,&b)!=EOF )
{
v = gcd(a,b);
if((n/v)%2) //里面等于0的时候不执行 所以这是判断 n 是奇数还是偶数的
{
printf("zzx\n"); //如果是基数 并且GCD为1 一定是 ZZX
}
else
printf("fk\n");
}
return 0;
}