CH3-UVA133

UVA133

題目的意思是把一對(duì)人圍成一圈, 隨機(jī)選一個(gè)作為標(biāo)號(hào)1, 并且逆時(shí)針(count-clockwise)編號(hào),也就是說(shuō)1位于左邊,N位于右邊。然后有兩個(gè)官員,一個(gè)從編號(hào)1開(kāi)始計(jì)數(shù),計(jì)數(shù)為k,到達(dá)后停下。一個(gè)從N開(kāi)始計(jì)數(shù),計(jì)數(shù)為m,到達(dá)后停下。在所停下的這個(gè)人面前離開(kāi)隊(duì)列。接著繼續(xù)計(jì)數(shù)直到?jīng)]有人為止。因?yàn)閮蓚€(gè)人是同時(shí)開(kāi)始的,所以可能會(huì)遇到同時(shí)達(dá)到同一個(gè)位置。這時(shí)候一個(gè)人出隊(duì)列就行。

分析

思維很簡(jiǎn)單, 編寫(xiě)walk(start, stepSize, direct)函數(shù),實(shí)現(xiàn)從start位置開(kāi)始,該位置為無(wú)效位置(既下一個(gè)有效位置的最近的無(wú)效位置, direc為方向)。因?yàn)槟鏁r(shí)針的時(shí)候,數(shù)字是增加的,順時(shí)針的時(shí)候數(shù)字是減小的,所以direct = 1表示逆時(shí)針。

實(shí)現(xiàn)walk的方式更為簡(jiǎn)單, 每次走一步, 判斷邊界條件(=0和>N), 并且判斷該位置是否有效,有效則stepSize-1, 直到stepSize==0,停下的位置就是出隊(duì)列的位置。

總結(jié)

任何復(fù)雜的問(wèn)題, 都可以通過(guò)抽象的定義來(lái)屏蔽復(fù)雜的細(xì)節(jié)。就如通過(guò)walk方法, 先定義好該方法,然后根據(jù)定義實(shí)現(xiàn)該方法即可。

//
// Created by sixleaves on 2016/11/23.
//

#include <cstdio>
#include <cstring>

// direct == 1 表示逆時(shí)針, 起點(diǎn)從N開(kāi)始
// direct == -1 表示順時(shí)針, 起點(diǎn)從1開(kāi)始
// 表示從start位置開(kāi)始走, 走stepSize步, start位置是最靠近下一個(gè)有效位置的無(wú)效位置.(start, start + stepSize]
int n, k, m;
int applicant[26];
int walk(int start, int stepSize, int direct);
int main() {

    while (scanf("%d%d%d", &n, &k, &m) == 3 && n && k && m) {

        for (int i = 0; i<=n; i++) applicant[i] = i;
        int left = n;
        int p1 = n;
        int p2 = 1;
        while (left) {

            p1 = walk(p1, k, 1);
            p2 = walk(p2, m, -1);
            applicant[p1] = 0;
            left--;
            if (p1 != p2) {
                applicant[p2] = 0;
                printf("%3d%3d", p1, p2);
                left--;
            }else {
                printf("%3d", p1);
            }

            if (left) printf(",");
        }
        printf("\n");
    }
    return 0;
}

int walk(int start, int stepSize, int direct) {

    int index = -1;

    while (true) {

        start = start + direct;

        if (start > n) start = 1;
        if (start == 0) start = n;

        if (applicant[start] == 0) continue;

        if (applicant[start])
            stepSize--;

        if (stepSize <= 0) break;
    }

    index = applicant[start];
    return index;
}

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

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

  • 這個(gè)不錯(cuò)分享給大家,從扣上看到的,就轉(zhuǎn)過(guò)來(lái)了 《電腦專業(yè)英語(yǔ)》 file [fail] n. 文件;v. 保存文...
    麥子先生R閱讀 7,111評(píng)論 5 24
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,616評(píng)論 19 139
  • #幸福是需要修出來(lái)的~每天進(jìn)步1%~幸福實(shí)修09班~10-樊靜 2017.08.12(26/30) 【幸福三朵玫瑰...
    根本源閱讀 374評(píng)論 0 0
  • 天空的色彩繽紛著光陰 匆忙的來(lái)客尋找著時(shí)光 流年已去,歲月卻靜好著你我 我愿為 我有你為我點(diǎn)綴的那年 青春的確幸,...
    昌黎詩(shī)人閱讀 153評(píng)論 0 0
  • 2017.6.20 今天歷史最高體重,6月份的大姨媽第一天,還附帶著幾個(gè)意料之中的拖油瓶---那些個(gè)不安分的痘痘,...
    葡小桃閱讀 259評(píng)論 0 0

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