當前位置:首頁 » 操作系統 » 報數演算法

報數演算法

發布時間: 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;
}

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:887
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:580
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:683
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:254
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:112
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:803
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712