围圈报数

题目标题:

   围圈报数(谌海军)

 

题目描述:

有n(n<=100)围成一圈,顺序排号(从1排到n)。 从第一个人开始报数(从1报到m(m<=9)),凡报到m的人退出圈子, 问最后留下的是原来第几号的那位?

 

解题思路:

1、定义一个长度为100数组a,初始化为0;

2、接收键盘输入值n,m,数组a的前n-1个元素赋值为1~n;

3、建立两层嵌套循环,外循环至退出人数为n-1为止, 内循环中从0循环至n,将a数组中非0的数据逢m置零,同时记录退出人数;

4、循环全部结束后输出最后留下的一个a数组的非零元素的值。  

 

输入描述:

输入为两个正整数,第一个<=100,第二个<=9;  

 

输出描述:

k 输出为一个正整数;   样式输入: 100 3   样式输出: 91

 

#include <stdio.h>
void main ()
{
    int a[1000]={0},n,m,i=0,j=1,k;
    scanf("%d %d",&n,&m);
    for(k=0;k<n-1;)
    {
        if(a[i]!=m+1)/*报数*/
            a[i]=j;
        else 
        {
        for(;a[i]==m+1;)/*for语句是关键,可替为do while/while语句*/
            {
            if(i==n-1)
            i=0;
            else
            i++;
            }
        a[i]=j;
        }       /*报数*/
        if (j==m)
        {
            j=1;
            a[i]=m+1;
            k++;
        }
        else 
            j++;
        if(i==n-1)
            i=0;
        else
            i++;
    }
    /*输出最后留下的人的序号*/
    for(i=0;i<n;i++)
        if(a[i]!=m+1)
            printf("%d",i+1);
        
}

 

posted @ 2014-04-05 12:34  achst  阅读(581)  评论(0编辑  收藏  举报