大學(xué)生新聞網(wǎng),大學(xué)生新聞發(fā)布平臺(tái)
大學(xué)生新聞網(wǎng)
大學(xué)生新聞大學(xué)生活校園文學(xué)大學(xué)生村官
社會(huì)實(shí)踐活動(dòng)社會(huì)實(shí)踐經(jīng)歷社會(huì)實(shí)踐報(bào)告社會(huì)實(shí)踐總結(jié)社會(huì)實(shí)踐心得
全國(guó)排名校友會(huì)版軟科排名分類排名本科排名一本排名二本排名專科排名學(xué)校地址
求職簡(jiǎn)歷職場(chǎng)法則面試技巧職場(chǎng)故事求職招聘大學(xué)生就業(yè)
英語(yǔ)學(xué)習(xí)計(jì)算機(jī)學(xué)習(xí)電氣工程機(jī)械工程經(jīng)濟(jì)管理建筑設(shè)計(jì)財(cái)務(wù)會(huì)計(jì)
申請(qǐng)書證明書檢討書自薦信演講稿心得體會(huì)調(diào)查報(bào)告讀后感求職信推薦信其它范文

C語(yǔ)言三色旗問(wèn)題

有一根繩子,上面有紅、白、藍(lán)三種顏色的旗子。繩子上旗子的顏色并沒有順序,現(xiàn)在要對(duì)旗子進(jìn)行分類,按照藍(lán)色、白色、紅色的順序排列。只能在繩子上進(jìn)行移動(dòng),并且一次只能調(diào)換兩面旗子,怎樣移動(dòng)才能使旗子移動(dòng)的次數(shù)最少?

算法思想
旗子在繩子上移動(dòng),而且一次只能調(diào)換兩面旗子,因此只要保證在移動(dòng)旗子時(shí),從繩子的開頭開始,遇到藍(lán)色旗子向前移動(dòng),遇到白色旗子則留在中間,而遇到紅色的旗子則向后移動(dòng)。要使移動(dòng)次數(shù)最少,可以使用三個(gè)指針 b、w、r 分別作為藍(lán)旗、白旗和紅旗的指針。

若 w 指針指向的當(dāng)前旗子為白色,則 w 指針增加 1,表示白旗部分增加一面。若 w 指針指向的當(dāng)前旗子為藍(lán)色,則將 b 指針與 w 指針?biāo)赶虻钠熳咏粨Q,同時(shí) b 指針與 w 指針都增加 1,表示藍(lán)旗和白旗部分都多了一個(gè)元素。若 w 指針指向的當(dāng)前旗子為紅色,則將 w 指針與 r 指針?biāo)赶虻钠熳咏粨Q,同時(shí) r 指針減 1,即 r 指針向前移動(dòng),未處理的部分減 1。剛開始時(shí),r 指向繩子中最后一個(gè)旗子,之后 r 指針不斷前移,當(dāng)其位于 w 指針之前,即 r 的值小于 w 的值時(shí),全部旗子處理完畢,可以結(jié)束比較和移動(dòng)旗子操作。


在程序中通過(guò)宏定義用大寫字母 'B' 'W' 'R' 分別代表藍(lán)色、白色和紅色;字符數(shù)組 “char color[]”表示繩子上的各種顏色的旗子;旗子移動(dòng)時(shí)通過(guò)一個(gè) while 循環(huán)判斷移動(dòng)過(guò)程是否結(jié)束,在 while 循環(huán)中根據(jù)旗子的不同顏色進(jìn)行不同的處理。

程序代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BLUE 'B'
#define WHITE 'W'
#define RED 'R'
#define swap(x,y){char temp;\
        temp=color[x];\
        color[x]=color[y];\
        color[y]=temp;}
 
int main()
{
    char color[]={'R','W','B','W','W','B','R','B','W','R','\0'};
    int w=0;
    int b=0;
    int r=strlen(color)-1;
    int i;
 
    for(i=0;i<strlen(color);i++)
        printf("%c ",color[i]);
    printf("\n");
    while(w<=r)
    {
        if(color[w]==WHITE)
            w++;
        else
        {
            if(color[w]==BLUE)
            {
                swap(b,w);
                b++;
                w++;
            }
            else
            {
                while(w<r&&color[r]==RED)
                    r--;
                swap(r,w);
                    r--;
            }
        }
    }
    for(i=0;i<strlen(color);i++)
        printf("%c ",color[i]);
    printf("\n");
    return 0;
}
調(diào)試運(yùn)行結(jié)果
交換前旗子顏色排列順序及按順序最少次數(shù)移動(dòng)旗子后的排列順序如下所示:
R W B W W B R B W R
B B B W W W W R R R
總結(jié)
在該實(shí)例中,分別用語(yǔ)句“int w=0;”“int b = 0;”“int r=strlen(color)-1;”定義并初始化白旗、藍(lán)旗、紅旗的指針 w、b、r。在交換不同顏色旗子時(shí),通過(guò)旗子的指針實(shí)現(xiàn)交換函數(shù) swap 的功能。
    作者:大學(xué)生新聞網(wǎng)    來(lái)源:大學(xué)生新聞網(wǎng)
    發(fā)布時(shí)間:2025-03-10    閱讀:
    掃一掃 分享悅讀
  • C語(yǔ)言整數(shù)逆序輸出
  • 將一個(gè)從鍵盤輸入的整數(shù)存放到一個(gè)數(shù)組中,通過(guò)程序的運(yùn)行按照數(shù)組中的逆序輸出該整數(shù),利用遞歸的方法解決問(wèn)題。
  • 03-10 關(guān)注:0
  • C語(yǔ)言約瑟夫環(huán)問(wèn)題
  • 編號(hào)為 1,2,3,…,n 的 n 個(gè)人圍坐一圈,任選一個(gè)正整數(shù) m 作為報(bào)數(shù)上限值,從第一個(gè)人開始按順時(shí)針方向報(bào)數(shù),報(bào)數(shù)到 m 時(shí)停止,報(bào)
  • 03-10 關(guān)注:0
  • C語(yǔ)言輸出等腰三角形
  • 本實(shí)例要求從鍵盤輸入任意整數(shù) n,通過(guò)程序運(yùn)行輸出對(duì)應(yīng)高度為 n 的等腰三角形。
  • 03-10 關(guān)注:0
  • C語(yǔ)言字符串加密和解密算法
  • 在本實(shí)例中要求設(shè)計(jì)一個(gè)加密和解密算法。在對(duì)一個(gè)指定的字符串加密之后,利用解密函數(shù)能夠?qū)γ芪慕饷埽@示明文信息。
  • 03-09 關(guān)注:3
  • C語(yǔ)言獲取矩陣的最大值及其下標(biāo)
  • 本實(shí)例要求使用二維數(shù)組將一個(gè) 3×4 的矩陣中所有元素的最大值及其下標(biāo)獲取,通過(guò)該程序,掌握二維數(shù)組的引用知識(shí)。
  • 03-09 關(guān)注:4
主站蜘蛛池模板: 特黄aa级毛片免费视频播放| 国产精品无码免费播放| 免费观看美女裸体网站| heyzo北条麻妃久久| 欧美黄色一级片免费看| 国产男女猛烈无遮挡免费视频| 久久综合九色欧美综合狠狠| 色视频在线观看视频| 好紧我太爽了视频免费国产| 亚洲激情校园春色| 日本亚州视频在线八a| 无遮挡色视频真人免费| 公交车老师屁股迎合我摩擦| 99久久免费国产精精品| 果冻传媒七夕潘甜甜在线播放| 国产亚洲福利精品一区二区| 一级毛片aa高清免费观看| 爱福利极品盛宴| 国产欧美日韩精品a在线观看| 久久久久噜噜噜亚洲熟女综合| 精品1州区2区3区4区产品乱码 | 中文字幕三级电影| 琪琪女色窝窝777777| 国产精品一国产精品| 中文字幕视频网| 澳门码资料2020年276期| 国产欧美日韩在线播放 | 黄网址在线观看| 成年女人色费视频免费| 亚洲神级电影国语版| 麻豆精品传媒成人精品| 妞干网在线免费视频| 亚洲人成网站18禁止久久影院| 色哟哟精品视频在线观看| 95在线观看精品视频| 成**人特级毛片www免费| 亚洲欧美日本另类| 色视频线观看在线播放| 国产色视频免费| 丰满的己婚女人| 欧美日韩精品一区二区三区不卡 |