C语言有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数)凡报到3的人退出圈子麻烦注释下代码

voidmain(){inta[100],i,quit_num,k,n;voidmain(){inta[100],i,quit_num,k,n;printf("input... void main()
{int a[100],i,quit_num,k,n;
void main()
{int a[100],i,quit_num,k,n;
printf("input number:");
scanf("%d",&n);
for(i=0;i<n;i++)/*数组a存放原始编号*/
a[i]=i+1;
quit_num=0;/*出圈人数*/
i=0;
k=0;
while(quit_num<n-1)/*直到只剩下1人时*/
{if(a[i]!=0)k++;
if(k==3)
{a[i]=0;
quit_num++;
k=0;
}
i++;
if(i==n)i=0;
}
for(i=0;i<n;i++)
if(a[i]!=0)printf("%d",a[i]);
}
展开
 我来答
问明6E
高粉答主

2019-05-25 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.6万
展开全部

#include&lt;stdio.h&gt;

#define N 5//人数

void main()

{

int a[N]={0},i=0,out_n=0,call_n=0,*p;

p=a;

while(1){//循环报数

if(*p==0){//如果健在

if(out_n==(N-1))break;//如果仅剩一人

call_n++;//报数

call_n%=3;//最大为3,到了3就从0开始

if(call_n==0){*p=1;out_n++;}//为0(即3)出局

}

p++;if(p==a+N)p=a;//循环转向下一人

}

printf("最后剩余者的编号是:%d\n",p+1-a);

}

扩展资料:

printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。

函数的原型为:int printf(const char*format,...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

printf()函数的调用格式为:

printf("&lt;格式化字符串&gt;",&lt;参量表&gt;);

其中格式化字符串包括两部分内容:一部分是正常字符;这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

规定符

%d十进制有符号整数

%u十进制无符号整数

%f浮点数

%s字符串

%c单个字符

%p指针的值

%e指数形式的浮点数

%x,%X无符号以十六进制表示的整数

%o无符号以八进制表示的整数

%g把输出的值按照%e或者%f类型中输出长度较小的方式输出

%p输出地址符

%lu 32位无符号整数

%llu 64位无符号整数

听不清啊
高粉答主

推荐于2017-12-16 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
void main()
{int a[100],i,quit_num,k,n;
void main()
{int a[100],i,quit_num,k,n;
printf("input number:");
scanf("%d",&n); //读入总人数
for(i=0;i<n;i++)/*数组a存放原始编号*/
a[i]=i+1;
quit_num=0;/*出圈人数*/
i=0; //报数起点
k=0; //报数时所报的数字
while(quit_num<n-1)/*直到只剩下1人时*/
{if(a[i]!=0)k++; //若未出圈则报数
if(k==3) //报到3
{a[i]=0; //此人出圈
quit_num++; //出圈人数加1
k=0; //新一轮报数开始
}
i++; //移到下一个位置
if(i==n)i=0; //若超出范围,重回头上
} //此循环结束时,已有n-1人退出圈子
for(i=0;i<n;i++) //找到未出圈的人
if(a[i]!=0)printf("%d",a[i]); //如未出圈,就输出此人编号
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2016-10-24 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6474万
展开全部
int main(void){
    int a[100],i,quit_num,k,n;///a存放n个人的编号 
    printf("input number:"); 
    scanf("%d",&n);///输入人数n 
    for(i=0;i<n;i++)/*数组a存放原始编号*/ 
        a[i]=i+1; 
    quit_num=0;/*出圈人数*/ 
    i=0;///访问a数组的下标变量,即位置变量 
    k=0;///作为3次计数的变量 
    while(quit_num<n-1){/*直到只剩下1人时*/ 
        if(a[i]!=0)///不等于0的是该数的,等于0的已经退出
            k++;///数到1个不为0的就给3次计数变量k增1 
        if(k==3){///若k==3了,这个人就该退出了 
            a[i]=0;///用0标记这个人(下标为i的)退出 
            quit_num++;///退出了1人,就给退出人数记录变量quit_num增1
            k=0;///退出1人时将3次记数变量k清0,为下次记数作准备 
        } 
        i++;///每考察1个位子,无论是否有人都得将位子向后移1位 
        if(i==n)///若已把位子移到最后1人的后面了则将其归0,重新从头记数 
            i=0;
    } 
    for(i=0;i<n;i++)///考察整个数组
        if(a[i]!=0)///把数组中不为0的那个数打出来——他就是最后剩下的人的编号。 
    printf("%d",a[i]); 
    return 0;
}

三个///后面的是我给你的注释。不明白续问。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2018359
2016-10-24 · TA获得超过3494个赞
知道大有可为答主
回答量:3486
采纳率:73%
帮助的人:1410万
展开全部
#include <stdio.h>
#include <stdlib.h>
  
int main(int argc, char *argv[]) 
{
    int *s;
    int i,m=3,n,count,mm;
    printf("请输入n的值:");
    scanf("%d",&n);
    s=(int*)malloc(sizeof(int)*n);
    for(i=0;i<n;i++) //n个人,对应数组中的值为0则表示已出列
    {
        s[i]=1;  //初始,全部未出列
    }
    printf("\n退席的人编号为: ");
    i=0;
    count=0;   //出列人数---计数
    mm=1;      //从1开始数
    while(count<n)  //当出列人数小于总人数时循环
    {
        if(s[i]==1)
        {
            if(mm==m)   //当数到3个人时出列
            {
                printf("%d ",i+1);
                mm=1;  //重新从1开始数
                count++; //出列人数加1
                s[i]=0; //数组中标记该人已出列
            }
            else
            {
                mm++;
            }
        }
        i++;
        if(i>=n)  //当数组下标大于总人数时,从0开始,也就是数组尾接上数组头
        {
            i=0;
        }
    }
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lkh__1991
2015-11-01 · TA获得超过557个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:286万
展开全部
第一轮:3的倍数(共33个)去掉,还剩67个
第二轮:3的倍数加1(共33个)去掉,还剩34个
第三轮:3的倍数加2(共32个)去掉,还剩2个
不好意思,最后必定剩下2个,且最后留下来的是1号和2号(从3开始一直到100不是满足3的倍数就是满足3的倍数加1就是满足3的倍数加2,所以全部被去除)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式