当前位置:首页 » 操作系统 » 报数算法

报数算法

发布时间: 2023-02-19 20:11:44

‘壹’ c语言报数问题

设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。
设n=100,c=1,m=10.
(1)将1到n个人的序号存入一维数组p中;
(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;
(3)重复第(2)步直至圈中只剩下p[1]为止。
部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。 #include <stdio.h>
#define N 100
#define S 1
#define M 10int p[100],n,s,m;
void WriteDat(void);void Josegh(void)
{}void main()
{
m=M;
n=N;
s=S;
Josegh();
WriteDat();
}void WriteDat(void)
{
int i;
FILE *fp;

fp=fopen("out.dat" ," w" );
for(i=N-1;i>=0;i--){
printf(" %4d" ,p[i]);
fprintf(fp," %4d" ,p[i]);
if(i % 10==0){
printf("\n" );
fprintf(fp, "\n" );
}
}
fclose(fp);
}
/* 注:题中第一个for()循环是先对数组p赋初值。在第二个for()中用i来控制没出圈的
总人数,s1=(s1+m-1)%i的作用是找出报数后出圈人的下标,其中对i求余的作用是使报
数按圈进行(即报到尾后又从头报),该算法在很多题目中都用到。由于求余的作用当
报数正好到最后一个时s1为0,故而要进行if(s1==0)的判断。内嵌的for()循环是将出圈
以后的人依次往前移。*/
void Josegh(void)
{
int i,j,s1,w;
s1=s;
for(i=1;i<=n;i++)
p[i-1]=i;
for(i=n;i>=2;i--)
{s1=(s1+m-1)%i;<br>if(s1==0)<br>s1=i;<br>w=p[s1-1];<br>for(j=s1;j<i;j++)<br>p[j-1]=p[j];<br>p[i-1]=w;<br>}
} 这的问题和这个一样,看看吧,应该能解决了

‘贰’ C语言 报数问题

#include<stdio.h>
int main(void)
{
int a[9999],n,i,count,num,*p;
p=&a[0];
count=1;
n=i=num=0;
printf("Input n(n must be a natural number less than 10000):");
scanf("%d",&n);
if(n<=10000)
{
for(i=0;i<n;i++)
a[i]=i+1;
while(num<n-1)
{

count++;
p++; //这里就有越界的可能(p>&a[n-1]),如果这里越界了,那下
面的循环就不会执行了,那么p就一直++,直到num==n-1
if(p>&a[n-1]) //所以这里就要判断一下,或者开始时就把a的所有
元素全部初始化为0,就不用这个判断了
p=&a[0];
while(*p==0)
{
p++;
if(p>&a[n-1])
p=&a[0];
}

if(count%3==0)
{
*p=0;
num++;
}

}
while(*p==0)
{
p++;
if(p>&a[n-1])
p=&a[0];
}
printf("Last No. is:%d",*p);
}
else
printf("%d is out of range of valid values.",n);
return 0;
}

热点内容
httpsget加密 发布:2025-08-02 14:07:41 浏览:205
手机存储卡不能写入 发布:2025-08-02 14:01:11 浏览:26
weblogiclinux安装 发布:2025-08-02 13:59:41 浏览:569
vivo手机为什么不能设置锁屏密码 发布:2025-08-02 13:52:05 浏览:645
php二进制加密 发布:2025-08-02 13:51:04 浏览:282
水强行压缩 发布:2025-08-02 13:37:23 浏览:990
nginx内网访问 发布:2025-08-02 13:35:06 浏览:31
如何用解压密码解压手机文件 发布:2025-08-02 13:32:56 浏览:217
lex制作编译器 发布:2025-08-02 13:31:52 浏览:7
php把数组写入文件 发布:2025-08-02 13:25:51 浏览:282