zoukankan      html  css  js  c++  java
  • 约瑟夫问题

    对十个数进行排序,按数顺序开始报数,如果出现3的倍数则淘汰,直至剩下一位。(约瑟夫问题)

    (1)数组法

    #include <stdio.h>

    int main()

    {

       int a[100];

       int n=10,k=3;

       int i;

       for(i=1;i<=n;i++) a[i]=i;

       int tot=0,cnt=0;

       for(i=1;tot<n;i++)

       {

           if(i==n+1) i=1;

           if(a[i]==-1) continue;

           ++cnt;

           if(cnt%k==0)

              {

                  printf("%d Out! ",i);

                  a[i]=-1;

                  ++tot;

              }

       }

        return 0;

    }

    (2)数据链表法。

    #include <stdio.h>

    #define N 1000

    int a[N];

    int n=10,k=3;

    int main()

    {

       int i;

       for(a[n]=1,i=1;i<n;i++) a[i]=i+1;/**构造环*/

       int tot=0,cnt=0;

       for(i=1;tot<n;)

       {

           i=a[i];

           ++cnt;

           if(cnt%k==0)

              {

                  int j=i;

                  while(a[j]!=i) j=a[j];/*找到指向i的元素*/

                  a[j]=a[i];/*删除i,也就是指向i的下一个*/

                  ++tot;

                  printf("%d Out! ",i);

              }

       }

        return 0;

    }

  • 相关阅读:
    装箱,拆箱
    service 入门
    反射的文章
    二叉树的先序遍历,中序遍历,后续遍历 (文章)
    QTP里的DOM应用
    QTP对Excel的操作(EOM)
    QTP实用小技巧(1)
    QTP环境变量的动态生成与加载(深入篇)
    自动化测试基础
    QTP正则表达式
  • 原文地址:https://www.cnblogs.com/eastofeden/p/7376009.html
Copyright © 2011-2022 走看看