要求
- 随机生成四个由小到大且不重复的数字
- 用户直接猜
- 根据猜测的数字输出猜测的结果
(A表示位置和数值都正确的数字,B表示位置不正确但数值正确的数字) - 直到猜测正确才退出程序
创作思路与过程
- 第一步
确认需要用到的数据类型,然后由生成随机数易知需使用srand
for循环和数组来保存数字如下
int main() {
int org[4] = {};//保存随机数
int input[4] = {};//保存用户输入
srand(time(NULL)); //播种子,产生随机数
- 第二步
数列中的数字各不相同,则需要各自进行比较,与之前的猜数字同理
for(int i = 0; i < 4; i++){
int temp = rand()%9 + 1;
if (i == 0) {
org[i] = temp;//保存第一次的值用于比较
} else{
//开始判断是否重复
int j = 0;
for(; j < i; j++){
if (temp == org[j]) {
break;//重复了就重来一次
}
}
if (i == j) {
org[i] = temp;//不重复则可以保存这个值
}else{
i--;//重复的情况
}
}
}
- 猜的数字按从小到大的顺序排列
运用所学的排序方法,如:冒泡 选择 插入(此处使用冒泡排序)
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;
}
}
}
可以在此时进行实时检验,若输出的数列不重复且从小到大即编码正确
for(int i = 0; i < 4; i++){
printf("%d ", org[i]);
}
- 第四步
提示并接收玩家输入的猜测数字
printf("请输入猜测的数字:");
for (int i = 0; i < 4; i++) {
scanf("%d", &input[i]);
}
- 第五步
进行判断输入数字是否正确,并进行判断输入的数字属于哪种类型
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (org[i] == input[j]) {
//当数字正确时,仅需判断位置是否正确
if (i == j){
aCount++;//记录A的个数
}else{
bCount++;//记录B的个数
}
}
}
}
- 第六步
告诉玩家输入的结果
printf("%dA%dB\n", aCount, bCount);
if( aCount == 4){
printf("全对!!!!\n");
break;
}else{
aCount = 0;
bCount = 0;
}
}
7.第七步
得知直到猜测正确才退出程序,所以要在开始游戏时加上一个死循环,则最终写入结果为
while(1){
printf("请输入猜测的数字:");
for (int i = 0; i < 4; i++) {
scanf("%d", &input[i]);
}
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;
}
}
return 0;
检验
满足要求
课后反思
自己写的时候说花时间太长而且代码过于繁琐,应当更加优化,上面的代码靠齐。