杭电ACM 1230 WA求极限测试用例,或者请指出错误
http://acm.hdu.edu.cn/showproblem.php?pid=1230#include<stdio.h>#include<stdlib.h>#inc...
http://acm.hdu.edu.cn/showproblem.php?pid=1230
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
int Prime[30];
int ai[N],bi[N],sum[N];
int la,lb;
//素数筛选器
int prime()
{
int i,j,isPrime[N];
for(i=0;i<N;i++)
isPrime[i] = 1;
isPrime[0]=0;
isPrime[1]=0;
for(i=2;i<=N;++i)
{
if(isPrime[i] == 1)
{
for(j=2*i;j<N;j=j+i)
isPrime[j] = 0;
continue;
}
}
for(i=0,j=1;i<=N,j<=30;i++)
{
if(isPrime[i])
{
Prime[j++] = i;
}
}
Prime[0] = 1;
/*for(j=0;j<=26;j++)
{
printf("%d\n",Prime[j]);
}*/
return 0;
}
int max(int a,int b)
{
return a>b?a:b;
}
//接受输入,存到数组
void input()
{
int a,i=0;
char ch;
while(1)
{
scanf("%d%c",&a,&ch);
ai[i++] = a;
if(ch != ',')
{
la = i;
break;
}
}
i = 0;
while(1)
{
scanf("%d%c",&a,&ch);
bi[i++] = a;
if(ch != ',')
{
lb = i;
break;
}
}
}
//将火星文相加
void add()
{
int i,j,max_length;
max_length = max(la,lb);
for(i=la-1;i>=0;i--)
{
sum[la-i-1] = ai[i];
}
for(i=0;i<=max_length-1;i++)
{
sum[i] += bi[lb-i-1];
if(sum[i] >= Prime[i+1])
{
sum[i] -= Prime[i+1];
sum[i+1] += 1;
}
}
for(j=30;j>=0;j--)
{
if(sum[j] != 0)
break;
}
for(i=j;i>=0;i--)
{
printf("%d",sum[i]);
if(i != 0)
printf(",");
else
printf("\n");
}
}
int main()
{
int i,flag_a=0,flag_b=0;
prime();
while(1)
{
memset(ai,0,sizeof(ai));
memset(bi,0,sizeof(bi));
memset(sum,0,sizeof(sum));
flag_a = flag_b =0;
input();
for(i=0;i<la;i++)
{
if(ai[i]!=0)
{
flag_a = 1;
break;
}
}
for(i=0;i<lb;i++)
{
if(bi[i]!=0)
{
flag_b = 1;
break;
}
}
if(flag_a==0 || flag_b==0)
break;
add();
}
return 0;
} 展开
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
int Prime[30];
int ai[N],bi[N],sum[N];
int la,lb;
//素数筛选器
int prime()
{
int i,j,isPrime[N];
for(i=0;i<N;i++)
isPrime[i] = 1;
isPrime[0]=0;
isPrime[1]=0;
for(i=2;i<=N;++i)
{
if(isPrime[i] == 1)
{
for(j=2*i;j<N;j=j+i)
isPrime[j] = 0;
continue;
}
}
for(i=0,j=1;i<=N,j<=30;i++)
{
if(isPrime[i])
{
Prime[j++] = i;
}
}
Prime[0] = 1;
/*for(j=0;j<=26;j++)
{
printf("%d\n",Prime[j]);
}*/
return 0;
}
int max(int a,int b)
{
return a>b?a:b;
}
//接受输入,存到数组
void input()
{
int a,i=0;
char ch;
while(1)
{
scanf("%d%c",&a,&ch);
ai[i++] = a;
if(ch != ',')
{
la = i;
break;
}
}
i = 0;
while(1)
{
scanf("%d%c",&a,&ch);
bi[i++] = a;
if(ch != ',')
{
lb = i;
break;
}
}
}
//将火星文相加
void add()
{
int i,j,max_length;
max_length = max(la,lb);
for(i=la-1;i>=0;i--)
{
sum[la-i-1] = ai[i];
}
for(i=0;i<=max_length-1;i++)
{
sum[i] += bi[lb-i-1];
if(sum[i] >= Prime[i+1])
{
sum[i] -= Prime[i+1];
sum[i+1] += 1;
}
}
for(j=30;j>=0;j--)
{
if(sum[j] != 0)
break;
}
for(i=j;i>=0;i--)
{
printf("%d",sum[i]);
if(i != 0)
printf(",");
else
printf("\n");
}
}
int main()
{
int i,flag_a=0,flag_b=0;
prime();
while(1)
{
memset(ai,0,sizeof(ai));
memset(bi,0,sizeof(bi));
memset(sum,0,sizeof(sum));
flag_a = flag_b =0;
input();
for(i=0;i<la;i++)
{
if(ai[i]!=0)
{
flag_a = 1;
break;
}
}
for(i=0;i<lb;i++)
{
if(bi[i]!=0)
{
flag_b = 1;
break;
}
}
if(flag_a==0 || flag_b==0)
break;
add();
}
return 0;
} 展开
1个回答
展开全部
add函数里的
sum[i] += bi[lb-i-1];
改成
if (lb-i-1>=0) sum[i] += bi[lb-i-1];
就可以过了。
但是能过不代表你的程序没有问题……数组越界的问题极多
比如在prime函数里i的越界
for(i=2;i<=N;++i)
{
if(isPrime[i] == 1)
再比如j的越界
for(i=0,j=1;i<=N,j<=30;i++)
{
if(isPrime[i])
{
Prime[j++] = i;
}
}
另外上面的for循环,i<=N,j<=30是不是应该改成 i<=N && j<=30 ?语法还不熟啊……
富港检测技术(东莞)有限公司_
2024-05-27 广告
2024-05-27 广告
ISTA3E程序是对相同产品的集合包装的综合模拟性能测试,集合包装件被定义为将一个产品、多个产品或包装件放置在滑板或托盘上,固定在一起或是作为一个单元运输。例如:一台机器由带瓦楞底托的托盘上、瓦楞侧围、顶盖包装,用缠绕膜缠绕在托盘上。用于评...
点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询