问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

报数(C语言)

发布网友 发布时间:2022-08-17 23:31

我来回答

3个回答

热心网友 时间:2023-10-14 16:23

方法一:
#include<stdio.h>
void main()
{int a[100][100],n,m,i,j; /*a[100][100]只是随机设置的一个数组,需要时可设得更大或更小*/
K:scanf("%d:%d",&n,&m); /*注意输入格式,其中的":",表示两者的关系为"报数->取数"的关系*/
if(n>0&&m>0)
{for(i=1;i<=n;i++)
a[1][i]=i;
for(i=1;i<=n;i++)
{for(j=m%(n+1-i)+1;j<=(n+1-i);j++) /*将取余后右边第一项,作为下一次数数的最前一项,依次递增*/
a[i+1][j-m%(n+1-i)]=a[i][j];
for(j=1;j<=m%(n+1-i);j++) /*将取余后左边第一项,作为下一次数数的最后一项,
a[i+1][(n+1-i)-m%(n+1-i)+j]=a[i][j]; 依次递减;并将取到的数,依次放在下一次数数的外层*/
printf("f(%d:%d)(%d)=%d\n",n,m,i,a[i+1][(n+1-i)]);}} /*输出每一次报数时,取到的数*/
else printf("No effect!\n");
goto K; /*goto语句使程序可重新输入其他的情况,如"13:3"表示13个人,每报3次数,退出一个人*/
getch();}

方法二:
#include<stdio.h>
void main()
{int a[100],i,j,n,m;
K:scanf("%d:%d",&n,&m);
for(i=1;i<=n;i++)
a[i]=i;
for(j=0,i=1;i<=n;i=i%n,i++) /*i=i%n用来实现当i从1到达n,将重新回到1*/
{if(a[i]!=0) {j++; if(j%m==0) printf("f(%d)=%d\n",j/m,a[i]),a[i]=0;}
if(j/m==n) break;} /*反复计数,将数过的数标记为0,下次数数时不再数它*/
goto K;
getch();}

热心网友 时间:2023-10-14 16:24

#include<stdio.h>
#include<stdlib.h>
struct circle {int num;struct circle *next;};
void main()
{ int n,m,i;
struct circle * p,*q;

printf("请输入围成一圈的人数n=");
scanf("%d",&n);
printf("请输入编号m=");
scanf("%d",&m);
p=(struct circle*)calloc( n,sizeof(struct circle) );
for(i=1;i<n;i++)
{(p+i-1)->num=i;(p+i-1)->next=p+i;}
(p+n-1)->num=n;(p+i-1)->next=p;
for(i=1;p->next!=p;i++)
{if(i%m==0) q->next=p->next;q=p;p=p->next;}
printf("最后留下的是%d号\n",p->num);}

热心网友 时间:2023-10-14 16:24

方法一:(推荐)不受人数*,因为采用的动态分配
#include
#include
/*********************************************************************
*以循环队列的数据结构实现
*时间复杂度T(n)
*采用循环队列数据结构,使得每次对数组的访问次数减少到最少
**********************************************************************/
int main(void)
{

//定义并初始化各种变量
int i=0,//控制变量
num=0,//人数
die=0,//报数值
front,//队头位置
rear,//队尾位置
temp=0;//中间变量
do
{
printf("\n请输入人数(输入小于0退出):");
scanf("%d",&num);
printf("\n请输入报数值:");
scanf("%d",&die);
int *cycle=(int *)malloc((num+1)*sizeof(int));//多申请一个空间,在循环过程中方便处理
//依次编号,一号元素为0,暂时闲置
for(i=0;i<=num;i++)
{
cycle[i]=i;
}
//置队头和队尾的位置
front=1;
rear=num;

i=1;//报数器置1,开始报数
while(front!=rear)//当队列中元素不止一个时,循环
{
//备份出队数据
temp=(rear+1)%(num+1);//在位置rear后预留一个位置,以免有元素入队
cycle[temp]=cycle[front];

front=(front+1)%(num+1);//队头元素出队,队头位置加1

//如果出队的人报数符合条件
if(i==die)
{
i=1;//报数重新置1,开始报数
printf("%d出队\n",cycle[temp]);//显示出队的元素
}
//如果出队的人报数不符合条件
else
{
i++;//报数值增1
//队尾插入刚出队的元素
rear=(rear+1)%(num+1);
cycle[rear]=cycle[temp];
}
}
printf("幸存者是%d\n",cycle[front]);
free(cycle);
}while(num!=0);
return 0;
}

方法二:(按你的要求)
#include
/*********************************************************************
*以纯粹的思维方法实现
*时间复杂度T(n)
*过程繁琐,而且也不容易理解
*********************************************************************/
void main(void)
{
int result(int *p,int n,int m);
int i=0,m=0,n=0;
int num[50];
int *p;

for(;;)
{
printf("输入人数和报数值:");
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
num[i] = i + 1;
p = num;
cout<<"The last one is NO."<<result(p,n,m)<<endl;
}
}
int result(int *p,int n,int m)
{
int i=0;
for(i=0;i<n;i++)
p[i]=i+1;
i=0; // i为每次循环时计数变量
int k=0; // k为按1,2,3...m报数时的计数变量
int die=0; // die为退出人数
while (die<n-1) // 当退出人数比n-1少时(即未退出人数大于1时)执行循环体
{
if (p[i]!=0) k++; //如果编号为0,就不报数;如果编号不为0,报数加1
if (k==m) // 将退出的人的编号置为0
{
printf("%d退出\n",p[i]);
p[i]=0;
k=0;//重新开始报数
m++;//退出人数加1
}
i++;
if (i==n) i=0; // 报数到尾后,i恢复为0
}
while(*p==0) p++;
return *p;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...干或者杀人放火伤天害理的事 是不是 说谎对老天爷来也是不应该的事... 海尔BCD-206TD重要参数 海尔冰箱BCD_196TDXZ如何调温 农业银行密码锁定,但父母不在家怎么办? 奥比岛,号被盗,只记得初始密码,密保手机等密报全被改,充值记录也找不到... 拳皇97ol进阶称号获得方法介绍_拳皇97ol进阶称号获得方法是什么 有什么工作是周六日休息节假日的除了厂,列出来,最好初中毕业也能进_百... 广汉市新生代家庭农场怎么样? 想要考心理咨询师证书,合格证书,技能证书,能力证书等又是啥区别? 海盗船K70 RGB MK.2游戏机械键盘这个人体工程学键盘性价比怎么样?_百 ... c语言函数题:报数 魔兽争霸中鼠标不能向下移动 魔兽争霸下鼠标失灵怎么回事 魔兽争霸3鼠标怎么向下移动 液晶显示器漏光会越来越严重吗 魔兽争霸鼠标不能移动到下面 不知日常应用中显示器的阴阳屏跟漏光影响大吗? C语言 在命令提示符 输入 ctrl+z(EOF结束符) 出现 向右箭头,无法结束。。。 C语言 关于用键盘的上下左右箭头控制移动的问题 考研一定要报班吗 基础不好,考研有必要报班吗,不报班和报班的差距在哪里?有多大?基础不好的人如果不报班能考上吗, 考研报班和不报班差别大吗? 关键看啥? 贴瓷砖的装修方法 如何贴瓷砖 中国最胖的城市是哪里? 中国最胖的城市是哪个? 中国哪个城市的花最多? 中国最多植物的省会 c语言中的%d的d英文全称是什么以及f lf s c 等 华为p9只有用杂志锁屏才能有微信提示吗 为什么我的华为手机只有杂志应用一个锁屏形态,没有别的选项? C语言围圈报数问题 C语言,两个人轮流报数,从1开始依次报数,每人每次只能报1个数或2个数,谁先报到30谁获胜, 公历3月8日是什么星座 2010年3月8日是什么星座 圆柱如何求体积? 北大口腔医院能直接用杭州少儿医保结算吗 C语言高级指针 c语言高级指针,请来位大侠解答. C语言高级指针int(*(*f)())[10] 哪个省份教育最好? 已知圆柱的底面积和高如何求体积? 圆柱怎算底面积和体积? 从贵阳到洗马镇怎么坐车 从贵阳到龙里洗马怎么走,路程有多远啊? 从贵阳到洗马的路程是多少? 贵阳去龙里县洗马镇在哪里坐大巴车 请问贵阳羊昌至云雾高速经过龙里县洗马镇什么地方 从贵阳打出租车到洗马镇要多少钱啊 洗马镇到贵阳有几班车 求问贵阳火车站到贵阳客运站、西江千户苗寨、青岩古镇的乘车路线