文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C程序习题-求最后留下的是原来第几号的那位[10.5]

C程序习题-求最后留下的是原来第几号的那位[10.5]

时间:2010-08-17  来源:chengxiaopeng

   有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。    我的编程思路是这样的:设置一个指针,对数组进行顺序读取,如果计数的为3,则将指针所指的数设置为0,当指针到最后一个元素,则指针需要返回到最后一个,如果指针所指的数为0,则进行下一个数组单元的读取。同时设计一个置零的统计器,当置零的元素+1等于数组的总长度时(即为最后一个元素时),退出循环。代码如下:

#include <stdio.h>
#define N 60000

void oper(int *,int,int);
int main(int argc, char *argv[])
{
    int arr[N],i,n;
    int *p;
    printf("the all persion is count:");
    scanf("%d",&n);
    for (p = arr,i = 0; i < n; i++)
    {
        *p++ = i + 1;
    }
    
    p = arr;
    oper(p,n,3);
    system("pause");
    return 0;
}

void oper(int *arr,int n,int num)
{
     int *p,*p_begin,*p_end;
     int count = 0,k = 0;
     
     p_begin = arr;
     p_end = arr + n;
     p = p_begin;
     do
     {
        if (*p != 0 )
        {
           k ++;
        }
        if (k == num)
        {
           if (count + 1 == n) //when the remove element is last one ,break circle.

           {
              break;
           }
           else
           {
             printf("remove number : %d \n",*p); // printf remove info.

             *p = 0; //set point element is 0.

             k = 0; //counter reset 0.

             count ++;
           }
        }
        p++;
        if (p == p_end)
        {
           p = p_begin;
        }
     }while(1);
     
     printf("\nthe result number : %d\n",*p);
}


 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载