鱼C论坛

 找回密码
 立即注册
查看: 3207|回复: 7

[已解决]EX4.26 一尺之捶,日取其半 √

[复制链接]
发表于 2022-5-2 16:33:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我爱橙 于 2022-5-2 17:17 编辑

我国古代著作《庄子》中记载道:“一尺之捶,日取其半,万世不竭”。其含义是:对于一尺的东西,今天取其一半,明天取其一半的一半,后天再取其一半的一半的一半总有一半留下,所以永远也取不尽。请编写一个程序,使其可以计算出一条长为m的绳子,在n天之后剩下的长度。

运行结果示例1:

Input length and days:

12,5↙

length=0.37500

输入格式:
输入提示信息:"Input length and days:\n"

输入格式: "%f,%d"

输出格式:
"length=%.5f\n"

输入样例:
在这里给出一组输入。例如:

12,5
输出样例:
在这里给出相应的输出。例如:

Input length and days:
length=0.37500



#include <stdio.h>
#include <math.h>
int main()

{
  int m,n;
  float length;
  printf("Input length and days:\n");
  scanf( "%f,%d",&m,&n);
  for(n=1,m>=0;n++;)
  {
   length=m-m/2;
   length=length-length/2;
  }
 
  printf("length=%.5f\n",length);

return 0; 
}
最佳答案
2022-5-2 16:40:22
本帖最后由 isdkz 于 2022-5-2 16:46 编辑

#include <stdio.h>
#include <math.h>
int main()

{
  int n;                  // 改了这里
  float m;              // 改了这里
  printf("Input length and days:\n");
  scanf( "%f,%d",&m,&n);
  for(int i=1;i<=n;i++)                 // 改了这里
  {
   m=m-m/2;                              // 改了这里
  }
 
  printf("length=%.5f\n",m);              // 改了这里

return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-2 16:38:06 | 显示全部楼层
问题是啥呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-2 16:40:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-5-2 16:46 编辑

#include <stdio.h>
#include <math.h>
int main()

{
  int n;                  // 改了这里
  float m;              // 改了这里
  printf("Input length and days:\n");
  scanf( "%f,%d",&m,&n);
  for(int i=1;i<=n;i++)                 // 改了这里
  {
   m=m-m/2;                              // 改了这里
  }
 
  printf("length=%.5f\n",m);              // 改了这里

return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-2 16:54:15 | 显示全部楼层

可以问一下程序设计的思路吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-2 17:04:26 | 显示全部楼层
我爱橙 发表于 2022-5-2 16:54
可以问一下程序设计的思路吗?

这个思路就是你写的程序的思路,只是你那个每次循环减了两次肯定是不行的,

这样的话就不方便控制次数,因为每次循环用于计算的变量只加了 1,所以直接用 m 作为长度即可,

我这里搞多了一个在循环中计数的变量 i ,你那个也是可以的,只不过你写错了,

n 是天数,你对 n 重新赋值的话就把天数给覆盖了,所以你应该是对 n--,然后用 n 跟 0 比较,而不是使用 m,

还有初始化跟条件之间你写错成了 “,”,应该是 “;” 才对,

故你的代码也可以改成这样,你的思路没错,就是对语言还不够熟悉
#include <stdio.h>
#include <math.h>
int main()

{
  int n;
  float m;
  printf("Input length and days:\n");
  scanf( "%f,%d",&m,&n);
  for(;n>0;n--)
  {
   m=m-m/2;
  }
 
  printf("length=%.5f\n",m);

return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-2 17:17:19 | 显示全部楼层
isdkz 发表于 2022-5-2 17:04
这个思路就是你写的程序的思路,只是你那个每次循环减了两次肯定是不行的,

这样的话就不方便控制次数 ...

高估我了QAQ
真的没思路脑子一团浆糊,
说思路的话估计想的是累加天数然后递减算长度,
所以初始化了n和m,然后循环是天数的增加,
不知道怎么出循环所以没写循环调整表达式-_-||

谢谢鼓励啦,你的思路真的很清晰,两种方法都能懂,希望自己也能不仅限于看懂可以早日学会用代码语言来表达
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-2 17:18:22 | 显示全部楼层
我爱橙 发表于 2022-5-2 17:17
高估我了QAQ
真的没思路脑子一团浆糊,
说思路的话估计想的是累加天数然后递减算长度,

加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-2 20:25:05 From FishC Mobile | 显示全部楼层
isdkz 发表于 2022-5-2 17:04
这个思路就是你写的程序的思路,只是你那个每次循环减了两次肯定是不行的,

这样的话就不方便控制次数 ...

无限m/=2不行吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表