求解一道C语言基础编程题。

有3堆火柴共48根,现在做如下操作:从第1堆火柴中拿出和第2堆相同的火柴并入第2堆,再从第2堆中拿出与第3堆相同的火柴数并入第3堆,最后从第3堆拿出与现在第1堆相同的火柴... 有3堆火柴共48根,现在做如下操作:从第1堆火柴中拿出和第2堆相同的火柴并入第2堆,再从第2堆中拿出与第3堆相同的火柴数并入第3堆,最后从第3堆拿出与现在第1堆相同的火柴数并入第1堆。经过这样的操作后,现在这样的3堆都是16根,问开始操作之前的3堆火柴分别是几根? 展开
 我来答
听不清啊
高粉答主

2020-07-01 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

原来3堆火柴的根数分别是:22  14  12 根

#include<stdio.h>

int main()

{ int i,j,a[3]= {16,16,16};

  for(i=2; i>-1; i--)

  { a[(i+1)%3]/=2;

    a[i]+=a[(i+1)%3];

  }

  for(j=0; j<3; j++)

    printf("%d ",a[j]);

  printf("\n");

  return 0;

}

追问
这我看不懂,能讲一下思路吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YZX浪子
2020-07-01 · TA获得超过110个赞
知道小有建树答主
回答量:260
采纳率:86%
帮助的人:63.8万
展开全部
#include <stdio.h>

void GetNums(const int n[3], int res[3]) {
if (NULL == n || NULL == res) {
return;
}

memmove(res, n, sizeof(int) * 3);

#define BACK_MOVE(src, dst) (src) += (dst >>= 1);
BACK_MOVE(res[2], res[0]);
BACK_MOVE(res[1], res[2]);
BACK_MOVE(res[0], res[1]);
#undef BACK_MOVE

}

int main(int argc, const char* const argv[]) {
int n[3] = { 16, 16, 16 };
GetNums(n, n);
for (int i = 0; i < 3; i++) {
printf("%d ", n[i]);
}
printf("\n");

return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式