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