Android Day6

Android Day6

內(nèi)容:

Ⅰ隨機(jī)數(shù)的使用方法,并利用隨機(jī)數(shù)編寫猜數(shù)字游戲

Ⅱ利用C語(yǔ)言數(shù)組編寫數(shù)字游戲

Ⅲ冒泡法、選擇法、插入法排序

實(shí)踐

Ⅰ隨機(jī)數(shù)

1.隨機(jī)數(shù)的用法
(1)rand()函數(shù)是產(chǎn)生隨機(jī)數(shù)的一個(gè)隨機(jī)函數(shù),rand()返回值為一隨機(jī)數(shù)值
(2)在調(diào)用此函數(shù)前,必須先利用srand()設(shè)好隨機(jī)數(shù)種子。如果未設(shè)隨機(jī)數(shù)種子,rand()在調(diào)用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為1。
(3)srand函數(shù)是隨機(jī)數(shù)發(fā)生器的初始化函數(shù)
(4)rand()產(chǎn)生的是偽隨機(jī)數(shù)字,每次執(zhí)行時(shí)是相同的;若要不同,用函數(shù)srand()初始化它。
(5)rand()和srand()要一起使用,其中srand()用來(lái)初始化隨機(jī)數(shù)種子,rand()用來(lái)產(chǎn)生隨機(jī)數(shù)。因?yàn)槟J(rèn)情況下隨機(jī)數(shù)種子為1,而相同的隨機(jī)數(shù)種子產(chǎn)生的隨機(jī)數(shù)是一樣的,失去了隨機(jī)性的意義,所以為使每次得到的隨機(jī)數(shù)不一樣,用函數(shù)srand()初始化隨機(jī)數(shù)種子。srand()的參數(shù),用time函數(shù)值(即當(dāng)前時(shí)間),因?yàn)閮纱握{(diào)用rand()函數(shù)的時(shí)間通常是不同的,這樣就可以保證隨機(jī)性了。
2.隨機(jī)數(shù)的具體使用:猜數(shù)字游戲

隨機(jī)產(chǎn)生4個(gè)不相同的數(shù)字 從小到大排序
1 2 3 4
玩家開始輸入
1 4 5 6
如果位置正確且數(shù)字正確用A輸出
如果數(shù)字正確位置不正確用B輸出

先進(jìn)行數(shù)組和變量的全局定義
int orgArray[4] = {};
int guessArray[4] = {};
int countA = 0;
int countB = 0;

利用srand函數(shù)產(chǎn)生隨機(jī)數(shù)

srand((unsigned int)time(NULL));
int randomNum = 0;
while (1) {
    for (int i = 0; i < 4; i++)
    {
        bool isExist = false;
        randomNum = rand() % 10;

        for (int j = 0; j < i; j++) {
            if (orgArray[i] == randomNum) {
                //當(dāng)新產(chǎn)生的數(shù)在原數(shù)組中是否出現(xiàn),若出現(xiàn)則跳出,同時(shí)給isExist變量賦值為true
                isExist = true;
                break;
            } 
    }
            //沒(méi)有出現(xiàn)時(shí)
            if (isExist == false) {
                break;
        }

開始排序

int j = 0;
for (; j < i; j++) {
//當(dāng)新產(chǎn)生的數(shù)小于數(shù)組中的數(shù)時(shí)            
if (randomNum < orgArray[j]) {
                for (int k = i; k > j; k--) {
                    orgArray[k] = orgArray[k - 1];
                }
                break;
            }
        }//保存到數(shù)組里面去
        orgArray[j] = randomNum;
    }

    //開始游戲
    while (1) {
        printf("請(qǐng)輸入猜測(cè)的數(shù)字:");
        for (int i = 0 ; i < 4 ; i++) {
            scanf_s("%d", &guessArray[i]);
        }

        //判斷輸入
        for (int i = 0; i < 4; i++) {
             //控制原始數(shù)字,用原始數(shù)字依次和輸入的4個(gè)數(shù)字比較
            for (int j = 0; j < 4; j++) {
//控制輸入
                if (orgArray[i] == guessArray[j]) {
                    //判斷兩個(gè)的位置是否相同
                    if (i == j) {
                        //數(shù)字相同位置也相同時(shí)
                        countA++;
                    }
                    else {
                        //數(shù)字相同位置不同s時(shí)
                        countB++;
                    }
                }
            }
        }
        if (countA == 4) {
            //全部正確時(shí)
            printf("Congratulation!!!");
            break;
        }
        else {
            printf("%dA%dB\n", countA, countB);

            //還原數(shù)據(jù)
            countA = 0;
            countB = 0;
        }
    }
}

Ⅱ數(shù)字游戲

 終端輸入?yún)⑴c的人數(shù):7
 1 2 3 4 5 6 7
 大家圍成一圈
 請(qǐng)輸入死亡編號(hào):3
 凡是報(bào)道3的人都死亡 后面的人繼續(xù)數(shù)數(shù)
 輸出最后一個(gè)活著的人的編號(hào)

int total = 0;
int number[10] = {};
int killNumber = 0;
int count = 0;
int totalKilledNumber = 0;

printf("請(qǐng)輸入?yún)⑴c人數(shù):");
scanf_s("%d", &total);

給數(shù)組賦值 編號(hào)

for (int i = 0; i < total; i++) {
    number[i] = i + 1;
}

printf("請(qǐng)輸入死亡號(hào)碼:");
scanf_s("%d", &killNumber);

   開始游戲

for (int i = 0; i < total; i++) {
    //判斷這個(gè)人有沒(méi)有被殺掉
    if (number[i] != KILLED) {
        //報(bào)數(shù)
        count = count + 1;
    }

判斷當(dāng)前編號(hào)是不是死亡號(hào)碼

    if (count == killNumber) {
        //殺掉人
        number[i] = KILLED;

還原編號(hào)

    count = 0;

死亡人數(shù)+1

                totalKilledNumber++;

        //是否結(jié)束
        if (totalKilledNumber == total - 1) {
            break;
        }
    }

判斷這一次循環(huán)是不是完成

if (i == total - 1) {
        //讓i回到起始點(diǎn)
        //防止++ 導(dǎo)致回到第二個(gè)
        i = -1;
    }
}

printf("\n");
//測(cè)試一次的結(jié)果
for (int i = 0; i < total; i++) {
    printf("%d ", number[i]);
}

Ⅲ冒泡法、選擇法、插入法排序

冒泡排序 通過(guò)一次排序 最大的沉底

int num[] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10; i++){//比較的次數(shù)
    for (int j = 0; j < 10-i-1; j++){
        if (num[j] > num[j+1]) {
            //交換j和j+1的值
            int temp = num[j+1];
            num[j+1] = num[j];
            num[j] = temp;
        }
    }
}

選擇排序
一次取出一個(gè)值 默認(rèn)他是最小的
如果發(fā)現(xiàn)比這個(gè)數(shù)小 就交換
遍歷整個(gè)數(shù)組 找到一個(gè)最小的

int num[] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10-1; i++){
    //默認(rèn)這是最小的
    //int min = num[i];//3
    for (int j = i+1; j < 10; j++){
        //控制用min和后面的每一個(gè)進(jìn)行比較
        if (num[i] > num[j]){
            //j對(duì)應(yīng)的數(shù)字比min還小 交換
            int temp = num[i];
            num[i] = num[j];
            num[j] = temp;
        }
    }
    //一次遍歷之后找到最小的值min
    //num[i] = min;
}

插入排序

int num[] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10; i++) {
    //讓i和i+1比較大小
    if (num[i] > num[i+1]) {
        //交換值
        int temp = num[i];
        num[i] = num[i+1];
        num[i+1] = temp;
        
        //讓num[i]和前面的所有進(jìn)行比較
        for (int j = i; j > 0; j--){
            if (num[j] < num[j-1]) {
                temp = num[j];
                num[j] = num[j-1];
                num[j-1] = temp;
            }
        }
    }
}

for (int i = 0; i < 10; i++) {
    printf("%d ", num[i]);
}
printf("\n");

感想

今天應(yīng)該是我寫的最難的一次了,昨天思考了一下,沒(méi)有頭緒就沒(méi)有再寫,現(xiàn)在明白了當(dāng)時(shí)應(yīng)該多思考思考,哪怕寫不出來(lái),第二天聽講的時(shí)候肯定也會(huì)更加輕松,雖然聽完覺(jué)得恍然大悟,但是過(guò)一會(huì)自己再寫,卻拿起筆又放下,無(wú)從下筆,所以還是希望自己能在推敲這里多下點(diǎn)功夫,不能遇到一點(diǎn)難題就不繼續(xù)了
peace

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 目的 學(xué)習(xí)關(guān)于排序的一些算法以及運(yùn)用 技術(shù)及其使用 1.冒泡排序 2.選擇排序 3.插入排序 4.c++隨機(jī)生成整...
    W1NFRED閱讀 633評(píng)論 0 1
  • 目的 在昨天,我們進(jìn)行了數(shù)組的基礎(chǔ)學(xué)習(xí),大概理解了數(shù)組的原理與使用方法,熟能生巧。於是在今天,我們便運(yùn)用幾個(gè)實(shí)際的...
    董浩叔叔說(shuō)你好啊閱讀 263評(píng)論 0 1
  • 寫一個(gè)匿名函數(shù),判斷指定的年是否是閏年 寫一個(gè)函數(shù)將一個(gè)指定的列表中的元素逆序( 如[1, 2, 3] -> [3...
    浩子_唯一號(hào)閱讀 203評(píng)論 0 1
  • 1. 寫一個(gè)匿名函數(shù),判斷指定的年是否是閏年 2. 寫一個(gè)函數(shù)將一個(gè)指定的列表中的元素逆序( 如[1, 2, 3]...
    Lis_reak閱讀 312評(píng)論 0 0
  • 今天手帳班畢業(yè),哎呀太懶了,快點(diǎn)補(bǔ)上吧,看著人家做的那么好自己又眼饞
    旺火火閱讀 115評(píng)論 0 0

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