HDU ACM 2113 一道简单的题目,请教高手。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU ACM 2113 一道简单的题目,请教高手。相关的知识,希望对你有一定的参考价值。
Problem Description
有一天, KIKI 收到一张奇怪的信, 信上要KIKI 计算出给定数各个位上数字为偶数的和.
eg. 5548
结果为12 , 等于 4 + 8
KIKI 很苦恼. 想请你帮忙解决这个问题.
Input
输入数据有多组,每组占一行,只有一个数字,保证数字在INT范围内.
Output
对于每组输入数据,输出一行,每两组数据之间有一个空行.
Sample Input
415326
3262
Sample Output
12
10
Author
kiki
我的解答:
#include<stdio.h>
#include<string.h>
int main()
char str[1000];
int len,i,sum;
while(scanf("%s",&str)!=EOF)
sum=0;
len=strlen(str);
for(i=0;i<len;i++)
if(str[i]=='2')
sum+=2;
if(str[i]=='4')
sum+=4;
if(str[i]=='6')
sum+=6;
if(str[i]=='8')
sum+=8;
printf("%d\n\n",sum);
return 0;
结果提示Presentation Error,请高手指教啊!谢谢!
Output 中要求每两组数据之间有一个空行.
所以最后一行不用输出一行一个空行
改一下就行了··,这种题目都有,汗···
#include<stdio.h>
#include<string.h>
int main()
char str[1000];
int len,i,sum;
int re = scanf("%s",&str);
while(re != EOF)
sum=0;
len=strlen(str);
for(i=0;i<len;i++)
if(str[i]=='2')
sum+=2;
if(str[i]=='4')
sum+=4;
if(str[i]=='6')
sum+=6;
if(str[i]=='8')
sum+=8;
printf("%d\n",sum);
re = scanf("%s",&str);
if(re != EOF)
printf("\n");
return 0;
参考技术A Presentation Error是输出格式错误! 参考技术B 楼上的也太见怪了吧? 这种格式要求在ACM比赛中很常见的 参考技术C printf("%d\n\n",sum); 会不会这里多了一个换行?
HDU 3853:LOOPS
LOOPS
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=3853
题意:
有一个网格,从点(1,1)开始走,要走到点(n,m),点(X,Y)可以走到点(X,Y),(X,Y+1),(X+1,Y),概率分别为p0,p1,p2,每走一步耗费2点魔力,求走到终点所耗费的魔力的期望
题解:
一道简单的求期望的题,不会求期望的可以看下这里
具体公式如下: dp[i][j]=p[i][j][0]*dp[i][j]+p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j]
即:dp[i][j]=(p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j])/(1.0-p[i][j][0])
此题有个坑点,当点(x,y)的p0为1时,期望为无穷大,但题目保证答案会小于1000000,因此(x,y)这个点一定是到不了的
代码
#include<stdio.h>
#include<math.h>
const double eps=1e-3;
double p[1000][1000][3];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
scanf("%lf%lf%lf",&p[i][j][0],&p[i][j][1],&p[i][j][2]);
p[n-1][m-1][0]=0.0;
for(int i=n-1;i>=0;--i)
for(int j=m-1;j>=0;--j)
if(i!=n-1||j!=m-1)
{
double x=1-p[i][j][0];
p[i][j][0]=0.0;
if(fabs(x)<eps)continue;
if(i<n-1)p[i][j][0]+=p[i][j][2]*p[i+1][j][0];
if(j<m-1)p[i][j][0]+=p[i][j][1]*p[i][j+1][0];
p[i][j][0]+=2.0;
p[i][j][0]/=x;
}
printf("%.3f\\n",p[0][0][0]);
}
}
以上是关于HDU ACM 2113 一道简单的题目,请教高手。的主要内容,如果未能解决你的问题,请参考以下文章