作业帮 > 综合 > 作业

求助一道ACM题一道很简单的ACM题目,题在这里我写的代码如下:#include using namespace std

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/04 20:26:31
求助一道ACM题
一道很简单的ACM题目,题在这里
我写的代码如下:
#include
using namespace std;
int main(){
int n,m[30];
cin>>n;
for(int i=0;i=0;j--){
cout
和其他人问的吃一半 多吃一个的问题没什么两样 1/2 和 2/3不同 程序几乎一样

昨天总桃子数 == (今天总桃子数+1)*3.0/2.0
今天总桃子数目 是 昨天吃了2/3再多次一个的结果 理解上面公式!
请看:
#define N 10
/...代码略.../
int i,sum;
sum = 1; //第N天的桃子数目 你的m[N-1] 第N天的
for(i=N-1;i>0;i--) //改一下for循环反正都循环N-1次 这里(N-1)->1分别表示第(N-1)到1天
{
// 下面用开始给出的公式 左边的sum就是你的sum[30-i] 自己理解 太直接了
sum/*第i-1天的*/= 3.0/2.0*(sum/*第i天的*/+1); 这样一直算到第一天的 没错 就这样
}
再问: 非常感谢您的答案,我也理解了。 但是我想知道自己的代码哪里错了……万望指教,感激~
再答: 晕, 理解了还不知道你的错在哪里?? if(i==0) m[i]=1; //你这是第N天的吧 也就是最后一天 只剩下一个的那一天 m[i]=(m[i-1]+1)*3; //就这个错了!!! 没符合我上面写的公式 除2 少除以2 就对了 疏忽了吧 忘了个2 吃2/3 那么前一天是今天的加1然后乘以3除以2
再问: 吃了2/3再多吃一个,就说明前一天是今天的+1再3倍啊,这里没错吧……
再答: 对是3倍 确实是溢出问题!!! 3^29 = (2^29)*(1.5^29) 至少大于 (2^29)*(2^14) ==2^43 好大的数:输入30 结果必须要43位(还多)以上的二进制数来表示 double : 32位(要看编译器了) //结果当然溢出 比如输入21必然有溢出问题 int: 32位(要看编译器了) long double ?? 我没写过这样的 你可以试试看你的数据类型是多少位的。(如果低于43位 输入30,就是错的 其他也是一样考虑) cout