要实现的目标:
猜数字游戏:
游戏开始 产生四个1到9之间的不重复的,且按从小到大排序随机数
e.g2 3 4 8
玩家随机输入4个数字
如果猜测的数字正确且位置也正确 输出A
如果猜测的数字正确但位置不正确 输出B
请输入猜测数字:e.g 2 5 8 9 1A1B(一个A 一个B)
e.g 1 2 3 4 0A3B(三个B 零个A)
最多的猜测次数:10次
主要技术
数组 产生1~9的随机数 for循环控制不重复 排序
数组:存储四个类型一样的数字
产生1~9的不同随机数:rand()函数+利用时间不同,播种,每次产生不同的随机数
for循环控制四个随机数均不相同:第一个随机数直接保存,不可能会有重复;从第二个开始,要与他前面的每一个随机数进行比较,若相同,重新产生,若不同,则可以保存
排序:利用冒泡排序(双重for循环,数值大的元素沉底)
代码的实现
产生四个1到9之间每次都不同的的不重复的随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, const char * argv[]) {
int org[4] = {};//保存随机数
int input[4] = {};//保存用户输入
int aCount = 0;
int bCount = 0;
//播种子
srand(time(NULL));
//产生随机数
for(int i = 0; i < 4; i++){
int temp = rand()%9 + 1;
if (i == 0) {
//第一次 直接保存
org[i] = temp;
} else{
//判断是否重复
//i正好和当前已有个数对应
int j = 0;
for(; j < i; j++){
if (temp == org[j]) {
//重复了
break;
}
}
//判断for循环怎么出来的额
if (i == j) {
//不重复 保存
org[i] = temp;
}else{
//重复了
i--;
}
}
}
对系统随机产生的4个随机数进行排序
//冒泡排序
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;
}
}
}
开始游戏,提示用户输入按大小排序的不重复的4个数字,比较这4个数字的数值与系统随机产生的是否一致(利用for循环进行比较),再比较这4个数字的位置与系统随机产生的是否是一致,若某一个元素位置和数值均正确,则输出1A,若某一个元素只有数值正确,则输出1B
//开始游戏
while(1){
//提示输入
printf("游戏规则:系统随机生成四个按从小到大的顺序输出的不重复的数字,请用户依次输入四个数,若数字位置和数值均正确,输出A;若只有数字正确,输出B。如1 2 3 4\n");
printf("请输入猜测的数字:");
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]) {
//数字存在 判断位置
if (i == j){
aCount++;
}else{
bCount++;
}
}
}
}
//提示用户结果
printf("%dA%dB\n", aCount, bCount);
//判断是否正确
if( aCount == 4){
printf("全对!!!!\n");
break;
}else{
aCount = 0;
bCount = 0;
}
}