用C语言编写一个n个人围一圈,从第k个人开始顺序报号1,2,3。凡是报3的推出

作者&投稿:顾克 (若有异议请与网页底部的电邮联系)
C语言编程:有n个人围成一圈,按顺序从1到n编号。从第一个人开始,报到3的人退出圈子。~

#include
int main(int argc,char*argv[])
{
int i,j=0,k=0,n;
int a[30]={0};
printf("请输入有几个人玩游戏:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=1;//1代表活着,0代表出局
}
for(i=1;i<4;i=i%3+1)//控制i的值在[0,3]
{
if(3==i&&a[j]!=0)
{
a[j]=0;
printf("%d号玩家出局
",j+1);
k++;
if(n-1==k)
break;
j=(j+1)%n;
continue;
}
if(0==a[j])
{
j=(j+1)%n;
i--;
continue;
}
j=(j+1)%n;
}
for(i=0;i<n;i++)
{
if(1==a)
printf("%d号玩家活到的最后
",i+1);
}
}

扩展资料:用法:
1、printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。
格式输出,它是c语言中产生格式化输出的函数(在stdio.h中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。
要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
简单点理解就是,在一段程序中你正确使用该函数,可以在该程序运行的时候输出你所需要的内容。
2、printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。
printf()函数的调用格式为:printf("",)。
其中格式化字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。

目测没有问题。结果显示最后剩下的那个数字。
逻辑为:
1、给数据赋值
for(i=0;i<n;i++)/*数组a存放原始编号*/
a[i]=i+1;
2、将报到3的人退出圈子,因为最后只剩下一人,所以条件是quit_num<n-1=99
while(quit_num<n-1)/*直到只剩下1人时*/
{if(a[i]!=0)k++; /*报数,等于0的已经退出圈子*/
if(k==3) /*报数为3*/
{a[i]=0; /*退出圈子*/
quit_num++; /*统计人数*/
k=0; /*下次报数重新从一开始*/
}
i++; /*下次循环判断数组的下一个*/
if(i==n)i=0; /*循环到数组的最后一个,下次循环指定到第一个*/
}
3、输出最后个数字
for(i=0;i<n;i++)
if(a[i]!=0)printf("%d",a[i]);

main()
{
int i,count,h;/*i:报数*,count:退出的人数,h:每个人的编号*/
clrscr();
for(i=1;i<=N;i++)
{
if(i==N)
link[i].nextperson=1;
else
link[i].nextperson=i+1;
link[i].number=i;
}
printf("\n");
count=0;
h=N;
printf("sequence that persons leave the circle:\n");
while(count<N-1)
{
i=0;
while(i!=3)
{
h=link[h].nextperson;
if(link[h].number)
i++;
}
printf("%4d",link[h].number);
link[h].number=0;
count++;
}
printf("\nThe last one is:");
for(i=1;i<=N;i++)
if(link[i].number)
printf("%3d",link[i].number);
getch();
}

恩,数据结构的简单题
我以前都写过
没什么难度
懒得写了


C语言:输入一个整数n和n个字符串,从n个字符串中输出最短的字符串_百度...
include "stdio.h"#include <string.h>int main(int argc,char *argv[]){char s[101],st[101];int n,ln,t;printf("Please enter n(int n>0)...\\n");if(scanf("%d",&n)!=1 || n<1){printf("Input error, exit...\\n");return 0;}ln=100;while(n--){scanf("%100s",...

如何用c语言编程输入一个数将其插入从小到大排列的n个数且仍保持有序...
{ int i;for(i = n - 1; (i >= 0) && (x < list[i]); i--)list[i + 1] = list[i];list[i + 1] = x;} void main( ){ int i, list[N + 1], x;printf("从小到大输入10个数:\\n");for(i = 0; i < N; i++)scanf("%d", &list[i]);printf("输入要...

C语言写出:输入N个数,然后M个数组成一个组合,求所有组合? 如输入N为2...
scanf("%d %d",&n,&m); num=new int[n]; int *a=new int[n]; printf("请依次输入这N个数\\n"); for(int i=0;i<n;i++) { scanf("%d",&num[i]); a[i]=0;\/\/用来显示第i个数 } fun(a,0); delete num; delete a; system("pause"); return 0;}用递归实现的,你...

从键盘输入n个数,求这n个数的和并输出。C语言怎么编???
include<stdio.h> main(){int n,i,a,sum=0;scanf("%d",&n);\/*输入你所要计算的数的个数*\/ printf("\\n");for(i=1;i<=n;i++)\/*依次输入n个数,并求和*\/ {scanf("%d",&a);sum+=a;} printf("%d\\n",sum);return 0;} ...

c语言编写求n个整数的平均数,中位数和众数
\/\/更新众数}count=1;temp=number[i];}return p_count;}double calculate_mean(int number [],int n)\/\/求平均值{int i;double sum=0;for(i=0;i<n;i++){sum+=number[i];}return sum\/n;}double calculate_median(int number [],int n)\/\/求中位数{if(n%2==0)return (...

c语言编程 输入一个正整数n(1<n《10),再输入n个整数,将最小值与第一个...
1、首先建立一个工程和.c文件。2、然后输入头文件和主函数。3、定义变量类型并初始化。4、输入一个正整数n(1<n《10),再输入n个整数。5、将最小值与第一个数交换,最大值与最后一个数交换。6、剔除整数的个位数。7、最后得到输出的结果。8、编译,运行,得到最后的结果。

c语言,输入一个整数n和n个整数,输出这n个整数的最大值
include<stdio.h>int main(){int n,a,i,t;scanf("%d",&n);scanf("%d",&t); \/\/先读的第一个数要默认成最大的,不然,t的初值是不定的for(i=1;i<n;i++) \/\/循环中再读n-1个数{scanf("%d",&a);if(t

C语言中求N个数的和。
2 循环输入N个数值;3 将每个数值累加到结果上;4 循环结束后输出结果。二、代码:include <stdio.h>int main(){ int N, s=0, n; scanf("%d",&N);\/\/输入N while(N--)\/\/循环N次 { scanf("%d",&n);\/\/输入一个数。 s+=n;\/\/累加。 } printf("%d\\n"...

如何用C语言编写用结构体完成N个学生M名课程的成绩排序?
如何用C语言编写用结构体完成N个学生M名课程的成绩排序?  我来答 1个回答 #热议# 为什么孔子像会雕刻在美最高法院的门楣之上?信必鑫服务平台 2022-11-16 · TA获得超过4928个赞 知道顶级答主 回答量:27.1万 采纳率:100% 帮助的人:236万 我也去答题访问个人页 展开全部 这里是4名学生一门...

c语言编程:输入一个正整数n,产生n个1000以内的随机数,统计其中这些随机...
include <stdio.h>void main(){int i,a[1000],n,k=0;scanf("%d",&n);printf("生成1000以内的随机数: ");for(i=0;i<n;i++){a[i]=("%d",rand()%1000);printf("%d ",a[i]);if(a[i]%2==0) k++;}printf("\\n其中偶数的个数为%d",k);} 运行示例:...

和县13618626401: C语言:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子, -
登码地巴: #include <stdio.h> #define n 100 void main() {int a[n],i,quit_num,k; 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++; ...

和县13618626401: C语言有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报 数)凡报到3的人退出圈子麻烦注释下代码 -
登码地巴: void main() {int a[100],i,quit_num,k,n; printf("input number:"); scanf("%d",&n); //读入总人数 for(i=0;ia[i]=i+1; quit_num=0;/*出圈人数*/ i=0; //报数起点 k=0; //报数时所报的数字 while(quit_num{if(a[i]!=0)k++; //若未出圈则报数 if(k==3) //报...

和县13618626401: C语言:有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子 -
登码地巴: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18#include <stdio.h> constintM = 3; intmain() {intn, s = 0;scanf("%d", &n);if(n>10000){printf("n must be a natural number less than 10000 \n";printf("%d is out of range of valid values.",n);...

和县13618626401: c语言:有n个人围成一圈,按顺序编号.从第1个人开始报数,数到m时该人退出,并且下一个从1重新开始报数. -
登码地巴: int main(){int m,n; int bh; scanf("%d,%d",&n,&m); bh=(n%m);if(bh==0)bh=m;printf("%d",bh);}

和县13618626401: c语言题目;有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出 .... -
登码地巴: 这个问题叫约瑟夫环问题. n个人围成一圈,按顺序编号,分别为1、2、3..n.(你可以理解成每个人的座号). 然后1号开始,每人依次报号.即 (这里假设n=5) (前面是座号、后面是他报的号) 1:1 2:2 3:3(退出) 现在只剩下座号为1、2、4、5的人,从3的下一个开始报号 4:1 5:2 1:3(退出) 2:1 4:2 5:3(退出) 2:1 4:2 2:3(退出) 最后剩下4,就是当n=5时,你要得到的值是4

和县13618626401: c语言,有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, -
登码地巴: #include<stdio.h> #include<string.h> int main() { int a[1000],n,z=0,i,j=0,q=-1; fflush(stdin); scanf("%d",&n); for(i=0;i<n;i++) a[i]=1; while(1) { z=0; for(i=0;i<n;i++) { if(a[i]==1) { j++; } if(j==3) { a[i]=0; j=0; } } for(i=0;i<n;i++) { if(a[i]==1) { q=i; z++;} //if(z==...

和县13618626401: 4.c语言编有n个人围成一圈,顺序排号.从第一个人开始报数(从1到m报数),凡报到m的人退出(m>n)( -
登码地巴: #includetypedef struct node { int data; struct node *next;}Lnode; Lnode *create(int n){ int i; Lnode *h,*p,*r=(Lnode*)malloc(sizeof(Lnode); r->data=n;h=r; for(i=n-1;i>0;i--){ p=(Lnode *)malloc(sizeof(Lnode)); p->data=i; h=p;} r->next=h; return h; } void ...

和县13618626401: C语言,有n个小朋友围成一圈(n<50),顺序编号(编号从1~n).从第1号小朋友开始1、2、3报数,凡报到3的小朋友退出圈 -
登码地巴: int M=3; /全局变量 int i=2,n,s=0;/定义两个私有变量 scanf("%d",&n); /功能:输入多少小朋友 for(i=2;i<=n;++i) /循环从第二个小朋友到最后一个小朋友 s=(s+M)%i;/判断是否报到三,如果报到就排除,那个是取余符号 最后一个就是结果了,

和县13618626401: c语言,有n个人围成一圈,按顺序从1到n编好号.从第一个人开始报数,报到m(m<n)的人退出圈子 -
登码地巴: #include<stdio.h> int main() {int m,n,a[100],out=0,i,j=0; scanf("%d%d",&n,&m); /*输入m,n*/ for(i=0;i<n;i++) a[i]=i+1; while(out<n) {for(i=0;i<n;i++) {if(a[i]!=0) j++; if(j==m) {printf("%d\n",a[i]);out++;j=0;a[i]=0;} /*依次打印退出人的编号*/ if(i==n-1) break; } } i=0; if(a[i]!=0) {printf("%d",a[i]);i++;} /*最后打印剩下一人的编号*/ } 请采纳

和县13618626401: C语言题目:有N个人站成一圈,从第M个人开始报数,第一次报到1退出,第二次报到2退出``````退出后从下一位重新开始报数
登码地巴: #include "stdio.h" #include "stdlib.h" #define ZF struct zf #define Size sizeof(ZF) struct zf{ int num; struct zf *next; }; main() { int i,j=1,n,m; ZF *p,*f,*head;printf("n,m="); scanf("%d%d",&n,&m);for(i=0;i<n;i++){ p=(ZF *)malloc(Size); p->num...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网