m0_74279309 2022-12-02 16:31 采纳率: 62.5%
浏览 30
已结题

c语言(数组,循环,)

聪明猪Tom及其家人和其他猪群居,他们面临凶恶屠户Thomas,Thomas有一个嗜好,他喜欢将群居的猪排成一行,首先将处于奇数位置的猪送到屠宰场,剩下的猪自然成为新的一行。
在新的一行中,再次将处于单数位置的猪送到屠宰场,如此重复多次。
从键盘上输入所有猪的个数m(假设m不超过100),Tom及家人的个数n,求解Tom及家人应该站的最佳位置,输出这些位置。

  • 写回答

1条回答 默认 最新

  • 滴水不穿石 2022-12-03 00:07
    关注

    个人理解,仅供参考!谢谢!

    img

    img

    img

    #include <stdio.h>
    
    //提取有效数字个数
    int getn(int *arr, int n)
    {
        int k = 0;
        for (int i = 0; i < n; i++)
        {
            if (arr[i] != -1)
            {
                k++;
            }
        }
        return k;
    }
    
    int main(int argc, char *argv[])
    {
        int m, n;
        do
        {
            scanf("%d%d", &m, &n);
    
        } while (m > 100 || m < 0 || n < 0 || n > m);
    
        int arrm[m];
    
        //初始化
        for (int i = 0; i < m; i++)
            arrm[i] = i + 1;
    
        //设置
        int z = 0, k = 0; //k奇数计数器
        for (int i = 0; i < m; i++)
        {
            //设置一个剔除位值为-1
            if (arrm[i] != -1)
            {
                k++;
                if (k % 2 != 0)
                    arrm[i] = -1;
            }
    
            //提取有效位个数
            z = getn(arrm, m);
    
            //如果有效位个数等于小猪家人数跳出循环
            if (z == n)
                break;
    
            //保证回圈循环
            if (i == m - 1)
            {
                k = 0;
                i = -1;
            }
        }
    
        puts("\n小猪家人最好的位置:");
        for (int i = 0; i < m; i++)
        {
            if (arrm[i] != -1)
                printf("第%d位\n", arrm[i]);
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 12月2日