編程題: 1.設(shè)編號為1,2,… n的n個(gè)人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報(bào)數(shù),數(shù)到m 的那個(gè)人出列,它的下一位又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列,依次類推,直到所有人出列為止,由此產(chǎn)生一個(gè)出隊(duì)編號的序列。

/**
 *  編程題: 1.設(shè)編號為1,2,… n的n個(gè)人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報(bào)數(shù),數(shù)到m 的那個(gè)人出列,它的下一位又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列,依次類推,直到所有人出列為止,由此產(chǎn)生一個(gè)出隊(duì)編號的序列。
 *
 *  @param n n個(gè)人
 *  @param m 數(shù)到m那個(gè)人出列
 *  @param k 初始編號,第一次從這個(gè)人開始數(shù)
 */
+(void)run:(int)n andm:(int)m andk:(int)k
{
    NSMutableArray *mArr = [NSMutableArray new];//原始數(shù)據(jù)數(shù)組
    NSMutableArray *newmArr = [NSMutableArray new];//所有人出列后的編號順序數(shù)組
    //從k這個(gè)人開始報(bào)數(shù),所以減1
    k --;
    //初始編號按順序加入數(shù)組
    for (int i = 1; i<=n; i++)
    {
        [mArr addObject:@(i)];
    }
    //循環(huán)
    do {
        //從1開始報(bào)數(shù),報(bào)到m則停止
        for (int j = 1; j<m; j++)
        {
            k++;//下一個(gè)人
            //報(bào)數(shù)到最后一個(gè)人,則回到第一個(gè)人繼續(xù)報(bào)
            if (k>=mArr.count)
            {
                k=0;
            }
        
        }
        //如果k(數(shù)到m的人)大于總?cè)藬?shù),則對當(dāng)前總?cè)藬?shù)取余
        if (k>mArr.count)
        {
            k=k%mArr.count;
        }
        //數(shù)到m的人加入新數(shù)組,然后出列(從原數(shù)組刪除)
        NSString *temp = mArr[k];
        [newmArr addObject:@([temp intValue])];
        [mArr removeObjectAtIndex:k];
        //如果數(shù)到m的人剛好為最后一個(gè),則k置為0(下次報(bào)數(shù)從0開始)
        if (k == mArr.count)
        {
            k=0;
        }
    } while (mArr.count>0);//原始數(shù)組里面還有元素則繼續(xù)循環(huán)


    NSLog(@"%@",newmArr);
}

main函數(shù)里面調(diào)用:

[run run:10 andm:5 andk:2];

運(yùn)行結(jié)果:


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容