zoukankan      html  css  js  c++  java
  • 初级系列13.分糖果问题

    分糖果

    问题描述

    十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块 第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块 然后所有的小孩同时将手中的糖分一半给右边的小孩,糖块数为奇数的人 可向老师要一块,问经过这样几次后大家手中的糖的块数一样多?每人各有多少块糖?

    问题分析

    根据题意,十个小孩开始时所拥有的糖果数是不同的,但分糖的动作却是相同的,即所有的小孩同时将手中的糖分一半给右边的小孩,糖块数为奇数的人可向老师要一块,因此这是一个典型的可使用循环结构来解决的问题

    算法设计

    使用数组来存放老师开始给每个小孩分配的糖果数,因为有十个小孩,故定义一个长度为10的整型数组

    在循环过程中,糖果每经过一次重新分配,就打印输出一次,直到最后一次打印时,十个小孩所拥有的

    糖果数都相同,此时结束循环

    #include <stdio.h>
    
    void print(int s[]);
    int judge(int c[]);
    int j = 0;      /* !<记录糖果分配次数 */
    
    int main(void)
    {
        int sweet[10] = {10, 2, 8, 22, 16, 4, 10, 6, 14, 20};   /* !< 初始化数组数据*/
        int i, t[10], a;
        printf("child 1 2 3 4 5 6 7 8 9 10
    ");
        printf("..........................
    ");
        printf("time
    ");
        print(sweet);       /* !<输出每个孩子手中糖果的块数*/
        while (judge(sweet)) {  /* !<若不满足要求则继续进行循环*/
            /* !<将每个孩子手中的糖果分成一半*/
            for (i = 0; i < 10; i++) {
                if (sweet[i] % 2 == 0) {    /* !<若为偶数则直接分出一半*/
                    t[i] = sweet[i] = sweet[i] / 2;
                }
                else {  /* !<若为奇数则加1后再分出一半 */
                    t[i] = sweet[i] = (sweet[i]+1) / 2;
                }
            }
            /* !<将分出的一半糖果给右边的孩子 */
            for (a = 0; a < 9; a++) {
                sweet[a+1] = sweet[a+1] + t[a];
            }
            sweet[0] += t[9];
            print(sweet);   /* !<输出当前每个孩子手中的糖果数 */
        }
    }
    
    /* !<判断每个孩子手中的糖果数是否相同 */
    int judge(int c[])
    {
        int i;
        for (i= 0; i < 10; i++) {
            if (c[0] != c[i]) {
                return 1;   /*不相同返回1*/
            }
        }
        return 0;       /*相同返回0*/
    }
    
    /* !<输出数组中每个元素的值*/
    void print(int s[])
    {
        int k;
        printf("%2d", j++);
        for (k = 0; k < 10; k++) {
            printf("%4d", s[k]);
        }
        printf("
    ");
    }
    /* !<output */
        child 1 2 3 4 5 6 7 8 9 10
        ..........................
        time
         0  10   2   8  22  16   4  10   6  14  20
         1  15   6   5  15  19  10   7   8  10  17
         2  17  11   6  11  18  15   9   8   9  14
         3  16  15   9   9  15  17  13   9   9  12
         4  14  16  13  10  13  17  16  12  10  11
         5  13  15  15  12  12  16  17  14  11  11
         6  13  15  16  14  12  14  17  16  13  12
         7  13  15  16  15  13  13  16  17  15  13
         8  14  15  16  16  15  14  15  17  17  15
         9  15  15  16  16  16  15  15  17  18  17
        10  17  16  16  16  16  16  16  17  18  18
        11  18  17  16  16  16  16  16  17  18  18
        12  18  18  17  16  16  16  16  17  18  18
        13  18  18  18  17  16  16  16  17  18  18
        14  18  18  18  18  17  16  16  17  18  18
        15  18  18  18  18  18  17  16  17  18  18
        16  18  18  18  18  18  18  17  17  18  18
        17  18  18  18  18  18  18  18  18  18  18
    
        Process returned 0 (0x0)   execution time : 0.013 s
        Press any key to continue.
    
  • 相关阅读:
    No-3.算数运算符
    No-2.注释
    No-1.第一个 Python 程序
    mtcnn网络训练--------------->>>
    sudo vim ~/.condarc
    CVPR2021佳作 | One-Shot都嫌多,Zero-Shot实例样本分割
    查询--主机硬件结构类型
    人群计数:
    共享盘登录
    C++---->>YOLOv4-detect_demo.py参考
  • 原文地址:https://www.cnblogs.com/xzpin/p/11484593.html
Copyright © 2011-2022 走看看