今天,我们放松一下,做一些简单的思维题目。
*3 or /2
题目描述
随着第100届初学者大赛的举行,AC的办公室被装饰成一个长度为N,a={a1,a2,a3,…,aN}的序列。作为一名员工,斯努克想要玩这个序列。
具体来说,他希望尽可能多地重复以下操作:
对于每一个满足1 <= i <= N的i,执行以下操作之一:“将ai除以2”和“将ai乘以3”。
不能对于每个i都选择“ai乘以3”,至少有一个“将ai除以2”操作,操作之后的ai值必须是一个整数。最多可以执行多少个操作?
样例输入
3
5 2 4
样例输出
3
样例解释
这个序列最初是5 2 4。可执行以下三种操作:
首先,a1乘以3,a2乘以3,a3除以2。现在的序列是15 6 2。
接下来,a1乘以3,a2除以2,a3乘以3。现在的序列是45 3 6。
最后,a1乘以3,a2乘以3,a3除以2。现在的序列是135 9 3。
————————————————————分割线———————————————————————
这道题不想多说,看到题目立刻想到求输入的数可以除以多少个2.代码便不上了。
弹跳蚱蜢
题目描述
现在,有一只蚱蜢位于一个数轴上处。
因为蚱蜢非常喜欢正整数,因此,在最开始的第一分钟,它会向前跳1个单位的长度,在第二分钟,它会向前跳2个单位的长度,以此类推。而蚱蜢觉得一直的往前跳跃也没啥意思,因此,它规定,如果在这一次跳跃前,它处于的点坐标为偶数,那么,它就会向左跳,否则,它才会向右跳。
现在,已知蚱蜢最初始的坐标点的大小,请你求出当蚱蜢跳跃次以后到达的位置。
输入格式
第一行输入一个数字,表示样例的测试数量。
接下来行,每行两个数字,第一个数字表示蚱蜢的初始位置,第二个数字表示跳跃的次数。
样例输入
9
0 1
0 2
10 10
10 99
177 13
10000000000 987654321
-433494437 87178291199
1 0
-1 1
样例输出
-1
1
11
110
190
9012345679
-87611785637
1
0
这道题画一个草图,便可以知道将跳跃次数按照%4的答案进行分类讨论。
而且还要将最初始的坐标点的奇偶分类讨论
便可得以下代码
if(!(x & 1)){
if(n % 4 == 1) printf("%lld\n", x - n);i
if(n % 4 == 2) printf("%lld\n", x + 1);
if(n % 4 == 3) printf("%lld\n", x + 1 + n);
if(n % 4 == 0) printf("%lld\n", x);
} else {
if(n % 4 == 1) printf("%lld\n", x + n);
if(n % 4 == 2) printf("%lld\n", x - 1);
if(n % 4 == 3) printf("%lld\n", x - 1 - n);
if(n % 4 == 0) printf("%lld\n", x);
}
弗林特船长漂流记
————————————————————分割线———————————————————————
细读题目,你会发现数字的构成,只有两种9(1001),8(1000),全是4位,7(111)为什么不行,因为只有3位。
n=1时,9,8均可,选最小,那么x = 8(1000)
n=2时,99,98均可,选最小,那么x = 98(10011000)
n=3时,999,998均可,选最小,那么x = 998(100110011000)
n=4时,9999,9998均可,选最小,那么x = 9998(1001100110011000)
n=5时,99999,99998,99988均可,选最小,那么x = 99988(10011001100110001000)
n&#