一道c语言题目两种写法,本质一样,怎么一个能过一个却WA了。求解释??

正确的源代码
#include<stdio.h>
#include<stdlib.h>

typedef struct _st
{
int a;
double b;
}st;

st s[1005];

double d[10005];

int main()
{

int N, M, i, j;

while(scanf("%d%d", &N, &M) && (N || M))
{
double temp;

for(i = 1; i <= M; i++) {scanf("%d%lf", &s[i].a, &temp); s[i].b = 1 - temp;}

for(j = 0; j <= N; j++) d[j] = 1;

for(i = 1; i <= M; i++)
for(j = N; j >= 0; j--)
{

if(j - s[i].a >= 0 && d[j - s[i].a] * s[i].b < d[j])
d[j] = d[j - s[i].a] * s[i].b;
}

printf("%.1lf%%\n", (1 - d[N]) * 100);

}

return 0;
}

错误的源代码
#include<stdio.h>
#include<stdlib.h>

int money[1010]={0};
double rate[1010],dp[10010];
main()
{
int N,M,i,p;
double temp;
while(scanf("%d%d", &N, &M) && (N || M)){

for(i=0;i<=M-1;i++)
{
scanf("%d%lf",&money[i],&rate[i]);
rate[i]=1.0-rate[i];
}

for(i=1;i<=N;i++)
dp[i]=1.0;

for(i=0;i<=M-1;i++)
for(p=N;p>=0;p--)
if(p-money[i]>=0&&dp[p-money[i]]*rate[i]<dp[p])
{
dp[p]=dp[p-money[i]]*rate[i];
}
printf("%.1lf%%\n", (1 - dp[N]) * 100);

}

return 0;
}

错误的错哪了???

搞acm的?
你的第一个程序初始化是for(j = 0; j <= N; j++) d[j] = 1;
第二个是 for(i=1;i<=N;i++) dp[i]=1.0;
两者的范围不一样
应该是这个问题
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-09
#include<stdio.h>
#include<stdlib.h>

int money[1010]={0};
double rate[1010],dp[10010];
main()
{
int N,M,i,p;
double temp;这个变量你好像没用,或是变量名你写错了,但是这个出现的只是警告信息,这个程序在我的编译器里通过了呀,和上面一个结果一样,你能不能把报错信息发来我看下
while(scanf("%d%d", &N, &M) && (N || M)){

for(i=0;i<=M-1;i++)
{
scanf("%d%lf",&money[i],&rate[i]);
rate[i]=1.0-rate[i];
}

for(i=1;i<=N;i++)
dp[i]=1.0;

for(i=0;i<=M-1;i++)
for(p=N;p>=0;p--)
if(p-money[i]>=0&&dp[p-money[i]]*rate[i]<dp[p])
{
dp[p]=dp[p-money[i]]*rate[i];
}
printf("%.1lf%%\n", (1 - dp[N]) * 100);

}

return 0;
} 还有,这个程序的功能是什么?可以解释下吗
第2个回答  2012-02-09
int main()。。少了 int 在 main前面追问

这个可以省略

追答

你加了 return 0; 没加int main肯定就报错了 不是这样 那你指的是哪里的问题??

第3个回答  2012-02-09
也没看出来…………

一道背包问题的c语言题目 老是wa 怎么回事啊
int d[101][1001];这句话有问题吧,题是说N在1~100之间 c在1~1000之间不是说重量c就有1001个数啊 就算是也是[99][999]数组定义时应该是 int d[第一维是有多少背包加1][2]感觉在main里定义数组d就可以了如 Int d[N][2] N是手输滴 最大价值??用二维数组放最大值!!用二维...

请问为什么我在用gcc编译c语言写的一个小程序时不能使用“wall”参数...
具体参阅GCC的用法 一.gcc历史 GCC最早是Richard Stallman在十几年前编写的针对于C的编译器,意思即为GNU C Compiler,后来发展支持Ada,C++,Java,Objective C,Pascal,COBOL,以及支持逻辑编程的Mercury语言,后来其英文原名变为:GNU Compiler ollection([1]).除此之外,GCC对于各种硬件平台都提供了完善的支持。 一般的,...

c语言如何定义一个函数可以返回多个值回去给主函数呀。
使用全局变量:将shiwa,wa,qiao,bai,shi,ge定义成全局变量,然后子程序和主程序直接用 使用函数参数: void display(int* shiwa,int* wa,int* qiao,int* bai,int* shi,int ge) 函数中用类似这样的用法计算:(*ge)=Data%10; void main() { int shiwa,wa,qiao,bai,shi,ge; display(&shiwa,&wa,&qiao,&...

用VI写了一个hello.c程序放在\/里 请问怎么运行呢?
因为在预处理过程中对于.c和.cpp文件的处理方式是不一样的。可以使用的参数有:'c','objective- c','c-header','c++','cpp-output','assembler','assembler-with-cpp'.编译的时候, 如果有这样的一个用C语言写的test.tmp的文件,用gcc编译的时候就用gcc -x c test.tmp就可以让gcc用编译C语言的方式来编...

相似回答