EX4.26 一尺之捶,日取其半 √
本帖最后由 我爱橙 于 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;
} 问题是啥呀 本帖最后由 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;
} isdkz 发表于 2022-5-2 16:40
可以问一下程序设计的思路吗? 我爱橙 发表于 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;
}
isdkz 发表于 2022-5-2 17:04
这个思路就是你写的程序的思路,只是你那个每次循环减了两次肯定是不行的,
这样的话就不方便控制次数 ...
{:9_240:}高估我了QAQ
真的没思路脑子一团浆糊,
说思路的话估计想的是累加天数然后递减算长度,
所以初始化了n和m,然后循环是天数的增加,
不知道怎么出循环所以没写循环调整表达式-_-||
谢谢鼓励啦,你的思路真的很清晰,两种方法都能懂,希望自己也能不仅限于看懂可以早日学会用代码语言来表达{:9_228:} 我爱橙 发表于 2022-5-2 17:17
高估我了QAQ
真的没思路脑子一团浆糊,
说思路的话估计想的是累加天数然后递减算长度,
加油{:5_108:} isdkz 发表于 2022-5-2 17:04
这个思路就是你写的程序的思路,只是你那个每次循环减了两次肯定是不行的,
这样的话就不方便控制次数 ...
无限m/=2不行吗
页:
[1]