首页 > 其他分享 >递归

递归

时间:2023-05-03 20:32:25浏览次数:24  
标签:count 递归 .. int 洗牌 pos while

有2N张牌,编号为1,2,3..n,n+1,..2n,通过一次洗牌可以把牌的序列变为 n+1,1,n+2,2,n+3,3,n+4,4..2n,n

可以证明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。 编程对于小于100000的自然数N,求出M的值。

输入:每行一个整数N

输出:输出与之对应的M

输入样例:

20

1

输出样例:

20

2

#include <stdio.h>
int main(){
	int pos,count,n;
	while(scanf("%d",&n)!=EOF){     //遇Ctrl+Z结束
  		count=0;
    	pos=1;
    	while(1){
        	if(pos<=n)pos=2*pos;
            else pos=(pos-n)*2-1;
            count++;
            if(pos==1){
            	printf("%d\n",count);
            	break;
            }
        }
    }return 0;
}

如若要展示出洗牌过程,则:

#include <stdio.h>
int main(){
	int n,pos,count,i;
  int a[101],b[101];
  while(scanf("%d",&n)!=EOF){
  	for(i=1;i<=2*n;i++){
    	a[i]=i;
      printf("%d ",a[i]);        //输出查看数组中元素是否正确,可没有
    }printf("\n");
    count=0;
    while(1){
    	for(pos=1;pos<=2*n;pos++){
    		if(pos<=n)
      		b[pos*2]=a[pos];
       	else b[(pos-n)*2-1]=a[pos];
    	}for(pos=1;pos<=2*n;pos++){
    		a[pos]=b[pos];
        printf("%d ",a[pos]);     //输出洗牌过程
     	}printf("\n");
     	count++;
     	if(a[1]==1)
     		break;
     }printf("%d\n",count);
  }return 0;
}


标签:count,递归,..,int,洗牌,pos,while
From: https://blog.51cto.com/u_16036037/6241536

相关文章

  • 循环?还是递归?
    前言前几天群里有几个小伙伴,展开了如下讨论:--------------------------------------------------------------------------【西安-Java-小白】    谁遇上过?【杭州-Java-JOEL】    你要打断点看哪行出错......
  • 【web 开发基础】PHP 中的递归函数
    前言什么是递归?递归做为一种算法在程序设计语言中广泛应用。所谓的递归简单地概括就是程序调用自身的编程技巧称为递归(recursion)。递归在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学......
  • HJ89 24点运算 用递归生成器进行数列穷举
    思路:1、对4张牌进行全排序,并输出列表2、分别对排序进行计算尝试,采用穷举方式3、返回结果除了用递归生成器进行数组全排序外,也用模块fromitertools importpermutations,进行全排序。1#输出算式运算顺序从左至右运算,不需要括号确定优先级。23#列举所有排序方式,比如......
  • 线索化二叉树的递归算法
    //线索化二叉树的递归算法#include<stdio.h>#include<malloc.h>typedefstructBiTNode{intdata;structBiTNode*lchild,*rchild;//存储二叉树的左孩子和右孩子}BiTNode,*BiTree;typedefstructThreadNode{intdata;structThreadNode*......
  • Java根据Integer数组(有null值)递归构造二叉树
    二叉树:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.l......
  • 递归
     /*一:字符串反转1code2原理图*/ 一:字符串反转1codedeftraverse(s):print(s)iflen(s)==0:returnsreturntraverse(s[1:])+s[0]if__name__=='__main__':s="abcd"s1=traverse(s)print......
  • hdoj 展开字符串 1274 (字符串递归) 好题
    展开字符串TimeLimit:2000/1000MS(Java/Others)   MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):2116   AcceptedSubmission(s):1017ProblemDescription在纺织CAD系统开发过程中,经常会遇到纱线排列的问题。该问题的描述是这样的......
  • 递归实现三类枚举
    ​1.递归实现组合类枚举组合类枚举:从n中选s个数的所有组合n=0m=0defdfs(u:int,s:int,state:int):ifs==m:foriinrange(0,n):ifstate>>i&1:print(i+1,end='')print(""......
  • 递归比较两个字典差异-python dict different
    deffindDiff(d1,d2,path=""):forkind1:if(knotind2):print(path,":")print(k+"askeynotind2","\n")else:iftype(d1[k])isdict:......
  • 汉诺塔问题(递归)
    #include<iostream>usingnamespacestd;voidmove(intn,chara,charb,charc){ if(n==0) return; move(n-1,a,c,b); cout<<a<<"-->"<<c<<endl; move(n-1,b,a,c);}intmain(){ intn; chara='......