星痕࿐ 2024-06-01 21:41 采纳率: 46.2%
浏览 1
已结题

C语言,这道指针报数题最后几行是什么意思

题目如下

img

代码

#include <stdio.h>

int main(void) {
    /*********Begin*********/
    int i, k, m, n, s[50];
    int *p;
    p = s;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        *(p + i) = i + 1; //编号
    }
    i = 0;  //正在报数的人的编号
    k = 0; //报数时的计数变量
    m = 0; //退出的人数

    while (m < n - 1) {
        if (*(p + i) != 0) //跳过退出的人
            k++;
        if (k == 3) { //对退出的人编号为0;
            *(p + i) = 0; //改变地址
            k = 0;
            m++;
        }
        i++;
        if (i == n)
            i = 0; //一轮结束,重新开始报数
    }
    while (*p == 0)
        p++;
    printf("%d\n", *p);


    /*********End**********/
    return 0;
}

while (*p == 0)
        p++;
    printf("%d\n", *p);

这几行是什么意思可以解释一下吗?

  • 写回答

3条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    这几行代码的意思是找到最后一个非零元素的值,并打印出来。

    具体解释如下:

    1. 首先,while循环中的条件 *p == 0 判断指针p所指向的值是否为0,即判断当前位置的人是否已经退出圈子。而 *p 表示获取指针p所指向的值。

    2. 当指针p所指向的值为0时,表示当前位置的人已经退出圈子,需要移动指针p到下一个位置。

    3. 通过循环 while (*p == 0),不断移动指针p,直到找到指向的值不为0的位置。

    4. 最后,使用 printf 函数打印指针p所指向的位置的值,即最后一个非零元素的值。

    这段代码的作用是找到最后剩下的那个人的初始编号,并输出。注意,该段代码必须放在最后才能正确输出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求