美文网首页
2019-08-03

2019-08-03

作者: kkkk小天使 | 来源:发表于2019-08-03 08:42 被阅读0次

    一、难点:

    1.   产生随机数:  srand((unsigned int)time(NULL));    int temp=rand()%10;(产生10以内的随机数。)

    2. 插入排序:    产生的数字和j对应的数字一个一个进行比较,如果发现temp

    3. 产生随机数过程中的逻辑思维和循环嵌套。定义布尔类型判断产生的随机数是否重复  并考虑最内层循环结束出现的两种结果!(此处为重点)(1)重复->break (2)比完了 j==i ->结束了 没有重复。

    二、程序:

    1、#import 

    int main(int argc, const char * argv[]) {

    int num[] = {3,0,1,8,7,2,5,4,6,9};

    //冒泡排序 通过一次排序 最大的沉底

    /*

    for (int i = 0; i < 10; i++){//比较的次数

    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;

    }

    }

    }

    */

    //选择排序 一次取出一个值 默认他是最小的

    //如果发现比这个数小 就交换

    //遍历整个数组 找到一个最小的

    //3,0,1,2,5,4,6

    /*

    for (int i = 0; i < 10-1; i++){

    //默认这是最小的

    //int min = num[i];//3

    for (int j = i+1; j < 10; j++){

    //控制用min和后面的每一个进行比较

    if (num[i] > num[j]){

    //j对应的数字比min还小 交换

    int temp = num[i];

    num[i] = num[j];

    num[j] = temp;

    }

    }

    //一次遍历之后找到最小的值min

    //num[i] = min;

    }

    */

    //插入排序

    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]和前面的所有进行比较

    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");

    return 0;

    }

    2、/*

    随机产生4个不重复的 0-9 之间的整数

    从小到大排序

    输入猜测的数字 1 2 3 4

    A表示数字正确 位置正确的个数 2A

    B表示数字正确 位置不正确 2B

    1.如何产生随机数

        //放种子

        srand((unsigned int)time(NULL));

        //产生随机数 num % 10  0 ... 9

        rand() % (max+1);

    */

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    #include <stdbool.h>

    //初始化数组

    void initArray(int array[]);

    //打印数组内容

    void show(int array[]);

    int main(int argc, const char * argv[]) {

        //定义一个数组 用于存放产生的随机数

        int originArray[4] = {};

        //初始化数组

        initArray(originArray);

        //打印

        show(originArray);

        return 0;

    }

    //初始化数组

    //1 2 1

    void initArray(int array[]){

        srand((unsigned int)time(0));

        for (int i = 0; i < 4; i++) {

            int temp = 0;

            bool isExist = false;

            while(1){

                //产生一个随机数

                temp = rand() % 10;

                //1 2 3

                //判断这个数字在数组里面是否存在

                //i表示当前数组里面已经存进去几个了

                for (int j = 0; j < i; j++){

                    if (array[j] == temp) {

                        //存在了

                        isExist = true;

                        break;

                    }

                }

                //什么情况下出来

                //1.break 2.遍历完毕还没找到相同

                if (isExist == false) {

                    break;

                }

            }

            //将这个随机数添加到数组里面

            array[i] = temp;

        }

    }

    //打印数组内容

    void show(int array[]){

        for ( int i = 0; i < 4; i++) {

            printf("%d ",array[i]);

        }

        printf("\n");

    }

    3、/*

    参数人数:7

    对每一个人从1开始编号 int

    死亡号码:3

    报数 只要报道3的同学都死亡 后面的继续从1开始报数

    */

    #import 

    #define KILLED -1

    int main(int argc, const char * argv[]) {

    int total = 0;

    int number[10] = {};

    int killNumber = 0;

    int count = 0;

    int totalKilledNumber = 0;

    printf("请输入参与人数:");

    scanf("%d", &total);

    //给数组赋值 编号

    for (int i = 0; i < total; i++) {

    number[i] = i+1;

    }

    printf("请输入死亡号码:");

    scanf("%d", &killNumber);

    //开始游戏了

    for (int i = 0; i < total; i++) {

    //判断指向的这个人有没有被杀掉

    if (number[i] != KILLED){

    //报数

    count = count + 1;

    }

    //判断当前编号是不是到了死亡号码

    if (count == killNumber){

    //杀掉这个人

    number[i] = KILLED;

    //还原编号

    count = 0;

    //死亡人数+1

    totalKilledNumber ++;

    //是不是该结束了

    if (totalKilledNumber == total-1){

    break;

    }

    }

    //判断这一次循环是不是到末尾了

    if (i == total-1){

    //让i回到起始点

    i = -1; //防止++ 导致回到第二个

    }

    }

    printf("\n");

    //测试一次之后的结果

    for (int i = 0; i < total; i++){

    printf("%d ", number[i]);

    }

    return 0;

    }

    三、感悟:

    放弃是最简单的,别看不起自己

    相关文章

      网友评论

          本文标题:2019-08-03

          本文链接:https://www.haomeiwen.com/subject/bjbddctx.html