前言
就是刚才看春晚感觉这个很神奇,虽然第一个咱模仿不过来,第二个全国人民这么多人,包括全场观众都有成功,这肯定是不需要什么技术,那我觉得这个肯定就是数学了,于是我就胡乱分析一通。
正文
首先准备4张扑克牌
假设4张扑克牌用a、b、c、d来表示,洗牌就是把abcd的顺序打乱,这里abcd是等价的,分别表示4个数字,这里假设他顺序就是abcd已经洗好的。
对折撕开
他撕开排列之后的顺序就变成了abcdabcd。
按照名字的字数移动
这个按照姓名的字数移动,假设姓名的个数为n,他最后需要移动其实就是n%4,这里假设对折撕开的两部分a和a是一样的,没有区别,移动4的倍数其实就等价为没有移动。
0 abcdabcd
1 bcdabcda
2 cdabcdab
3 dabcdabc ……
拿起最上面3张插入到中间
假设姓名是2个字,结果为cdabcdab,拿着三张插入服务器托管网到中间,之后他第一张和最后一张其实都是b了,中间的顺序不用考虑。
取最上面一张放一边
这里刚好取的就是确定的b,之后的思路就是考虑最后留下来的是最后半张扑克牌的b就行了。
按南北方,认为自己是南方人把最上面1张插入到中间,认为自己是北方人把最上面2张插入到中间,不确定的把服务器托管网最上面3张插入到中间
这里不管移动几张其实插入的都是中间,中间我们不需要考虑他的顺序,此时他最后半张扑克牌依旧是b。
按男女,男生丢掉最上面一张,女生丢掉最上面两张
到这里扑克牌个数又发生了改变,但是依旧没有影响最后一张扑克牌。
男生:6张
女生:5张
见证奇迹的时刻
这句话七个字。
男生移动之后,b成为倒数第二张,正数第五张
女生移动之后,b成为倒数第三张,正数也是第三张
第一张放最后,第二张丢出去,第三张放最后,第四章丢出去……
编写一个程序,要求按照这个步骤操作,最终留下来的是第几张扑克牌。
当然用链式可能会更好,但是我这里不考虑时间复杂度什么,主要是实现改功能,暂时不考虑效率。
#include
using namespace std;
int main(){
int n;
int i,j;
cout>n;
int *arr=new int(n);
//存入数据表示他的顺序
for(i=0;i=0;i--){
//暂存第一张
int tmp=arr[0];
//后面的往前面移动
for(j=0;j
补:
晚上躺床上睡不着,又在想这个问题。
他不就是每轮保留奇数,删除偶数,通过一个变量来记录当前是奇数次操作还是偶数次操作,如果是奇数次操作就将这个数保留,如果是偶数次操作就把数组元素置0表示清空,之后操作n-1次之后剩下的那个数就是需要的那个。
#include
using namespace std;
int main(){
int n;
int i,j;
int count=0;
cout>n;
int *arr=new int(n);
//存入数据表示他的顺序
for(i=0;i
总结
不知道这个思路是否正确,如果有错误,还希望各位大佬能够批评指正。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
1.OLED简介 OLED,即有机发光二极管 OLED引脚说明 引脚说明: 1、CS:OLED片选信号(低电平有效) 2、WR:向OLED写入数据 3、RD:向OLED读取数据 4、D[7:0]:8位双向数据线,有8个引脚,每个引脚传一位数据 5、RST(RE…