永发信息网

解决个编程问题!

答案:1  悬赏:60  手机版
解决时间 2021-06-02 03:29
  • 提问者网友:遮云壑
  • 2021-06-01 07:46
程序填空,不要改变与输入输出有关的语句。
输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。
提示:将每个人的编号存入数组,从第一个人开始报数,输出报数 m 的人的编号,并将该编号清除为0,重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。
输出使用语句:printf("No%d: %d\n", no, *p);
输入输出示例:括号内为说明
输入:
5 (n个人报数,n=5)
3 (报数m=3)
输出:
No1: 3 (第1个退出圈子的人编号是3)
No2: 1 (第2个退出圈子的人编号是1)
No3: 5 (第3个退出圈子的人编号是5)
No4: 2 (第4个退出圈子的人编号是2)
Last No is: 4 (最后一个人的编号是4)




#include<stdio.h>
int main(void)
{
int count, i, m, n, no;
int num[50];
int *p;

scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
num[i] = i + 1;
p = num;

p = num;
while(*p == 0)
p++;
printf("Last No is: %d\n", *p);
}
最佳答案
  • 五星知识达人网友:神也偏爱
  • 2021-06-01 08:14

#include<stdio.h>
int main(void)
{
int count, i, n, m, no;
int num[50];
int *p;
int k;
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++)
num[i] = i + 1;
p = num;
i=0;
k=n;
no=1;;
count=0;
while(k>1)
{
if(*p==0)p++;
else {
count++;
if(count==m)
{ printf("NO%d:%d\n",no,*p);
*p=0;
count=0;
k--;
no++;
}
p++;
};
i++;
if(i==n)
{
p=num;
i=0;
}
}
p = num;
while(*p == 0)
p++;
printf("Last No is: %d\n", *p);
}





你这边scanf有一排空着的我不知道是不是本来就可以写的,因为NO后面的那个no变量用来显示NO几的,


我是找不到别的变量来用了,所以加了个K变量,用来控制减少的人数~基地上跟你说的差不多吧~有问题再发我吧!

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯