7.demo猜数字,demo杀人游戏

demo


猜数字

/*猜数字
 随机产生四个不同的有序的数字 1 3 5 7
 等待用户输入猜测的结果:1 3 5 7
 用A来表示数字正确且位置正确的个数 1A
 用B来表示数字正确但位置不正确的个数 1B
 给8次机会
 */
#include 
#include 
int main(int argc, const char * argv[]) {
    //定义相关变量
    int right[4] = {};//保存产生的随机数
    int guess[4] = {};//保存猜的随机数
    int totaltime = 8;//确认猜的次数
    int A = 0;
    int B = 0;
    //产生不重复的4个随机数
    for (int i = 0; i < 4; i++) {
        int temp = arc4random()%9+1;//产生随机数
        if (i == 0) {
            right[0] = temp;//第一个数字直接输进去
        } else {
            int flag = -1;//设置标签
            for (int j = 0; j < i; j++) {
                if (temp == right[j]) {//有重复的
                    i--;//数字重复,浪费机会,重新赋予一次机会
                    flag = 0;//更改标签
                    break;//跳出循环,继续产生随机数
                }
            }
            if (flag == -1) {
                right[i] = temp;//没有重复的,保存数据
            }
        }
    }
    //对产生的随机数进行排序---选择排序
    for (int i = 0; i < 4; i++) {
        int min = right[i];//假设最小的
        for (int j = i+1; j < 4; j++) {//与剩下的依次比较
            if (min > right[j]) {//出现重复情况,将最小的值赋给min
                int temp = min;
                min = right[j];
                right[j] = temp;
            }
        }
        right[i] = min;//将min值依次放在数组里面
    }
    //猜测数字
    while (totaltime > 0) {
        //正确数字
        printf("正确数字:");
        for (int i = 0; i < 4; i++) {
            printf("%d",right[i]);
        }
        //换行
        printf("\n");
        //从终端接受用户的输入
        for (int i = 0; i < 4; i++) {
            printf("请输入猜测的第%d个数字:",i+1);
            scanf("%d",&guess[i]);
        }
        //计算结果
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                if (right[i] == guess[j]) {//判断数字是否相同
                    if (i == j) {//判断位置是否相同
                        A++;//数字相同,位置相同
                    } else {
                        B++;//数字相同,位置不相同
                    }
                }
            }
        }
        //预测判断的结果
        if (A == 4) {
            printf("恭喜猜对了!!!\n");
            break;//直接跳出循环,无需输出A和B的值
        }
        //次数减一
        totaltime--;
        printf("%dA  %dB\n请继续猜测,还有%d次机会\n",A,B,totaltime);
        if (totaltime == 0) {
            printf("很遗憾,游戏结束!\n");
        }
        //清空AB的值
        A = 0;
        B = 0;
    }
    return 0;
}
7.demo猜数字,demo杀人游戏_第1张图片
运行结果

杀人游戏

/*
 杀人游戏
 输入参与的人数 7
 将参与的人从1开始编号 1 2 3 4 5 6 7
 输入要杀的人的编号 3
 报的数为杀人的编号的就被杀掉后面的人继续从1开始报数
 输出最后一个存活的人的编号
 7
 1 2 3 4 5 6 7
 3
 */
#include 
#define kout -1
int main(int argc, const char * argv[]) {
    //初始化数据
    int people[100] = {};//不确定数组大小
    int count = 0;//参加游戏人数
    int killednumber = 0;//杀人的编号
    int killcount = 0;//被杀的人
    int flag = 0;//设置标记值
    //提示用户输入
    printf("请输入参加的游戏的人数是:");
    scanf("%d",&count);
    //编号
    for (int i = 0; i < count; i++) {
        people[i] = i+1;
    }
    //输入杀人的编号
    printf("请输入杀人的编号:");
    scanf("%d",&killednumber);
    //开始游戏
    for (int i = 0; i < count; i++) {
        if (people[i] != kout) {//先判断对应的人是否活着
            flag++;//标记值变化
            if (flag == killednumber) {//出局
                printf("%d号出局\n",people[i]);
                people[i] = kout;//标记出局的人
                flag = 0;//重新标记
                killcount++;//记录死亡人数
                if (killcount == count-1) {//只剩下一个人
                    //输出最终获胜者
                    for (int i = 0; i < count; i++) {
                        if (people[i] != kout) {
                            printf("%d号获得最终胜利\n",people[i]);
                        }
                    }
                    break;//直接跳出循环,游戏结束
                }
            }
        }
        //判断是否到了末尾,如果到了末尾,返回第一个
        if (i == count-1) {//到了末尾
            i = -1;//重新循环,取-1是因为一次for循环i会加1
        }
    }
    return 0;
}
7.demo猜数字,demo杀人游戏_第2张图片
运行结果

你可能感兴趣的:(7.demo猜数字,demo杀人游戏)