要實(shí)現(xiàn)的目標(biāo):
猜數(shù)字游戲:
游戲開始 產(chǎn)生四個(gè)1到9之間的不重復(fù)的役电,且按從小到大排序隨機(jī)數(shù)
e.g2 3 4 8
玩家隨機(jī)輸入4個(gè)數(shù)字
如果猜測的數(shù)字正確且位置也正確 輸出A
如果猜測的數(shù)字正確但位置不正確 輸出B
請輸入猜測數(shù)字:e.g?2 5 8 9 ?1A1B(一個(gè)A 一個(gè)B)
e.g? 1 2 3 4?0A3B(三個(gè)B 零個(gè)A)
最多的猜測次數(shù):10次
主要技術(shù)
數(shù)組?產(chǎn)生1~9的隨機(jī)數(shù)?for循環(huán)控制不重復(fù)?排序?
數(shù)組:存儲(chǔ)四個(gè)類型一樣的數(shù)字
產(chǎn)生1~9的不同隨機(jī)數(shù):rand()函數(shù)+利用時(shí)間不同衡查,播種,每次產(chǎn)生不同的隨機(jī)數(shù)
for循環(huán)控制四個(gè)隨機(jī)數(shù)均不相同:第一個(gè)隨機(jī)數(shù)直接保存埠啃,不可能會(huì)有重復(fù)桅狠;從第二個(gè)開始,要與他前面的每一個(gè)隨機(jī)數(shù)進(jìn)行比較陶冷,若相同,重新產(chǎn)生毯辅,若不同埂伦,則可以保存
排序:利用冒泡排序(雙重for循環(huán),數(shù)值大的元素沉底)
代碼的實(shí)現(xiàn)
產(chǎn)生四個(gè)1到9之間每次都不同的的不重復(fù)的隨機(jī)數(shù)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char * argv[]) {
int org[4] = {};//保存隨機(jī)數(shù)
int input[4] = {};//保存用戶輸入
int aCount = 0;
int bCount = 0;
//播種子
srand(time(NULL));
//產(chǎn)生隨機(jī)數(shù)
for(int i = 0; i < 4; i++){
int temp = rand()%9 + 1;
if (i == 0) {
//第一次 直接保存
org[i] = temp;
} else{
//判斷是否重復(fù)
//i正好和當(dāng)前已有個(gè)數(shù)對應(yīng)
int j = 0;
for(; j < i; j++){
if (temp == org[j]) {
//重復(fù)了
break;
}
}
//判斷for循環(huán)怎么出來的額
if (i == j) {
//不重復(fù) 保存
org[i] = temp;
}else{
//重復(fù)了
i--;
}
}
}
對系統(tǒng)隨機(jī)產(chǎn)生的4個(gè)隨機(jī)數(shù)進(jìn)行排序
//冒泡排序
for (int i = 0; i < 4-1; i++){
for(int j = 0; j < 4 - i-1; j++){
if (org[j] > org[j+1]) {
int temp = org[j];
org[j] = org[j+1];
org[j+1] = temp;
}
}
}
開始游戲思恐,提示用戶輸入按大小排序的不重復(fù)的4個(gè)數(shù)字沾谜,比較這4個(gè)數(shù)字的數(shù)值與系統(tǒng)隨機(jī)產(chǎn)生的是否一致(利用for循環(huán)進(jìn)行比較),再比較這4個(gè)數(shù)字的位置與系統(tǒng)隨機(jī)產(chǎn)生的是否是一致胀莹,若某一個(gè)元素位置和數(shù)值均正確基跑,則輸出1A,若某一個(gè)元素只有數(shù)值正確描焰,則輸出1B
//開始游戲
while(1){
//提示輸入
printf("游戲規(guī)則:系統(tǒng)隨機(jī)生成四個(gè)按從小到大的順序輸出的不重復(fù)的數(shù)字媳否,請用戶依次輸入四個(gè)數(shù),若數(shù)字位置和數(shù)值均正確,輸出A篱竭;若只有數(shù)字正確力图,輸出B。如1 2 3 4\n");
printf("請輸入猜測的數(shù)字:");
for (int i = 0; i < 4; i++) {
scanf("%d", &input[i]);
}
//開始
//1 5 8 9
//1 2 3 5
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (org[i] == input[j]) {
//數(shù)字存在 判斷位置
if (i == j){
aCount++;
}else{
bCount++;
}
}
}
}
//提示用戶結(jié)果
printf("%dA%dB\n", aCount, bCount);
//判斷是否正確
if( aCount == 4){
printf("全對!!!!\n");
break;
}else{
aCount = 0;
bCount = 0;
}
}