此題可用數學方法求解。
長治網站建設公司創新互聯建站,長治網站設計制作,有大型網站制作公司豐富經驗。已為長治數千家提供企業網站建設服務。企業網站搭建\成都外貿網站建設要多少錢,請找那個售后服務好的長治做網站的公司定做!
設有n個人(編號0~(n-1)),從0開始報數,報到(m-1)的退出,剩下的人繼續從0開始報數? (用數學方法解的時候需要注意應當從0開始編號,因為取余會取到0解。)
實質是一個遞推,n個人中最終留下來的序號與n-1個人中留下來的人的序號有一個遞推關系式。
假設除去第k個人,則
0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 ???????? // 原始序列 (1)
0, 1, 2, 3, ..., k-2, ? ? ?, k, ..., n-1????? // 除去第k人,即除去序號為k-1的人 ? (2)
k, k+1, ..., n-1, ? ?0, ? ?1, ? ? ? ?..., k-2// 以序號k為起始,從k開始報0? (3)
0, 1, ? ? ..., n-k-1, n-k, n-k+1, ..., n-2 ? // 作編號轉換,此時隊列為n-1人 (4)
變
換后就完完全全成為了(n-1)個人報數的子問題,注意(1)式和(4)式,是同一個問題,不同的僅僅是人數。比較(4)和(3),不難看
出,0+k=k, 1+k=k+1, ... ,(3)式中'0'后面的數字,((n-3)+k)%n=k-3,((n-2)+k)%n=k-2,
對于(3)式中'0'前面的數字,由于比n小,也可看作(0+k)%n=k,? (1+k)%n=k+1,? 故可得出規律:
設(3)中某一數為x' , (4)中對應的數為x,則有:x'=(x+k)%n.
設x為最終留下的人序號時,隊列只剩下1人時,顯然x=0; 此時可向前回溯至2人時x對應的序號,3人時x對應的序號……直至n人時x的序號,即為所求。
#include?stdio.h
int?main()
{????
int?n,m,s=0;????
scanf("%d%d",n,m);????
for?(int?i=2;i=n;++i)????
{s=(s+m)%i;????
printf("%d\n",s+1);}????
return?0;
}
#include stdio.h
int main(void)
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", n, m);
for (i=2; i=n; i++) s=(s+m)%i;
printf ("The winner is %d\n", s+1);
}
說明:只要輸入N=10,M=8即可滿足你的要求 還可以有其他變化 其中n為總人數 M為報數最大值
#includelt;stdio.hgt;
#define N 5//人數
void main()
{
int a[N]={0},i=0,out_n=0,call_n=0,*p;
p=a;
while(1){//循環報數
if(*p==0){//如果健在
if(out_n==(N-1))break;//如果僅剩一人
call_n++;//報數
call_n%=3;//最大為3,到了3就從0開始
if(call_n==0){*p=1;out_n++;}//為0(即3)出局
}
p++;if(p==a+N)p=a;//循環轉向下一人
}
printf("最后剩余者的編號是:%d\n",p+1-a);
}
擴展資料:
printf()函數是格式化輸出函數,一般用于向標準輸出設備按規定格式輸出信息。在編寫程序時經常會用到此函數。
函數的原型為:int printf(const char*format,...);函數返回值為整型。若成功則返回輸出的字符數,輸出出錯則返回負值。
printf()函數的調用格式為:
printf("lt;格式化字符串gt;",lt;參量表gt;);
其中格式化字符串包括兩部分內容:一部分是正常字符;這些字符將按原樣輸出;另一部分是格式化規定字符,以"%"開始,后跟一個或幾個規定字符,用來確定輸出內容格式。
參量表是需要輸出的一系列參數,其個數必須與格式化字符串所說明的輸出參數個數一樣多,各參數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。
規定符
%d十進制有符號整數
%u十進制無符號整數
%f浮點數
%s字符串
%c單個字符
%p指針的值
%e指數形式的浮點數
%x,%X無符號以十六進制表示的整數
%o無符號以八進制表示的整數
%g把輸出的值按照%e或者%f類型中輸出長度較小的方式輸出
%p輸出地址符
%lu 32位無符號整數
%llu 64位無符號整數
分享文章:c語言報數出圈函數PTA 圓圈報數c語言函數
網址分享:http://newbst.com/article44/doihiee.html
成都網站建設公司_創新互聯,為您提供做網站、網站制作、網站收錄、網站內鏈、網頁設計公司、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯