一道AC水题,有些地方不太明白?

welon123 2010-07-28 10:40:10
题目在这里:http://acm.hdu.edu.cn/showproblem.php?pid=2048
这题思路是怎样的呀?
找到别人的一段代码,有点地方不是很明白
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double x=1;
int i,n;
double a[21]={0};
for(i=2;i<=20;i++)
{
x=x*i;
if(i%2==1)
a[i]=a[i-1]-1.0/x;
else
a[i]=a[i-1]+1.0/x;
}//主要解释下for语句里的是什么意思?
cin>>n;
while(n--)
{
cin>>i;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a[i]*100<<"%"<<endl;
}
return 0;
}
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunyun1886358 2010-07-28
  • 打赏
  • 举报
回复
没搞懂。这个for循环是这个程序的核心,就是用来计算每增加一个人,所求事件的概率是利用增加前人数对应的事件的概率算出来的。
横云断岭 2010-07-28
  • 打赏
  • 举报
回复
想了很久,没想明白!
貌似是经典排列组合问题。数学牛人应该会。
个人觉得有点像动态规划。
zhuyaxiao123 2010-07-28
  • 打赏
  • 举报
回复
if(i%2==1)求i的余数这里应该是判断是不是奇数;
也就是说如果i是奇数执行a[i]=a[i-1]-1.0/x;
偶数 a[i]=a[i-1]+1.0/x;

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧