none
约瑟夫环的代码,大家评价下,看看我编程习惯有什么问题,谢谢了! RRS feed

  • 问题

  • #include "stdafx.h"
    #include<stdio.h>
    void main()
    {
     int a[100],i,j,k,n,s,f;
     printf("请输入约瑟夫总数\n");
     scanf_s("%d",&n);
     //n<100
     printf("请输入步距\n");
     scanf_s("%d",&s);
     //s<n
     printf("请输入开始的数\n");
     scanf_s("%d",&f);
     //f<n
     for(i=0;i<n;i++)
      a[i]=i+1;
     for(i=f-1,j=0;j<n;j++)
     {
      k=0;
      while(k<s)
      {
       if(a[i]!=-1)
       {
        k++;
       }
       if(k!=4)
        i++;
       if(i==n)
        i=0;
      }
      if(j==n-1)
       break;
      a[i]=-1;
      i++;
     }
     printf("%d\n",a[i]);
    }

    2013年3月2日 3:13

答案

  • 如果输入的数据非法的话,您该如何处理?

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 MaiBle 2013年3月11日 10:57
    2013年3月4日 4:58
    版主
  • 不是有更快的算法么,O(n)就可解

    int josefus(int n,int m) {
        int ret=0;

        int c;
        for(c=1;c<=n;c++)
        {

             ret=(ret+m-1)%c+1;

        }    

        return ret;
    }


    麻烦把正确答案设为解答。

    2013年3月4日 5:05
    版主

全部回复

  • 如果输入的数据非法的话,您该如何处理?

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 MaiBle 2013年3月11日 10:57
    2013年3月4日 4:58
    版主
  • 不是有更快的算法么,O(n)就可解

    int josefus(int n,int m) {
        int ret=0;

        int c;
        for(c=1;c<=n;c++)
        {

             ret=(ret+m-1)%c+1;

        }    

        return ret;
    }


    麻烦把正确答案设为解答。

    2013年3月4日 5:05
    版主