PKU ACM 1006
我的老是RUNTIMEERROR下面是我的程序代码,C的觉得没错呀#include"stdio.h"unsignedintjieguo(intp,inte,inti,in...
我的老是 RUNTIME ERROR
下面是我的程序代码,C 的
觉得没错呀
#include "stdio.h"
unsigned int jieguo(int p,int e,int i,int d)
{
int n,a;
for(a=21252;a>0;a--)
if((a+d-p)%23==0&&(a+d-e)%28==0&&(a+d-i)%33==0)
break;
return a;
}
main()
{
int p[100],e[100],i[100],d[100];
int n,j;
unsigned a[100];
for(n=0; ;n++)
{
scanf("%d%d%d%d",&p[n],&e[n],&i[n],&d[n]);
if((p[n]==-1)&&(e[n]==-1)&&(i[n]==-1)&&(d[n]==-1)) break;
}
for(j=0;j<n;j++)
a[j]=jieguo(p[j],e[j],i[j],d[j]);
for(j=0;j<n;j++)
printf("Case %d: the next triple peak occurs in %d days\n",j+1,a[j]);
}
中间少了个 int
各位高手们
问题到底出在哪呀
谢谢各位了 展开
下面是我的程序代码,C 的
觉得没错呀
#include "stdio.h"
unsigned int jieguo(int p,int e,int i,int d)
{
int n,a;
for(a=21252;a>0;a--)
if((a+d-p)%23==0&&(a+d-e)%28==0&&(a+d-i)%33==0)
break;
return a;
}
main()
{
int p[100],e[100],i[100],d[100];
int n,j;
unsigned a[100];
for(n=0; ;n++)
{
scanf("%d%d%d%d",&p[n],&e[n],&i[n],&d[n]);
if((p[n]==-1)&&(e[n]==-1)&&(i[n]==-1)&&(d[n]==-1)) break;
}
for(j=0;j<n;j++)
a[j]=jieguo(p[j],e[j],i[j],d[j]);
for(j=0;j<n;j++)
printf("Case %d: the next triple peak occurs in %d days\n",j+1,a[j]);
}
中间少了个 int
各位高手们
问题到底出在哪呀
谢谢各位了 展开
3个回答
展开全部
1.如楼上,这道题是中国剩余定理的引用,可直接用公式
2.不过,和LZ一样,第一次作这道题,我也是枚举:-),也是 RUNTIME ERROR ,备塌郁闷了好久,问了好多同学,才知道,是数组开小了,把“p[100],e[100],i[100],d[100]”数量级都改为1000就好了,因为onlinejudge的测试数据都蛮大的,100往往是不够把所有数据都保存的
3.其实ACM的题大多不是要求你保存数据,而是一个数据计算一次,然后输出,再处理另一个数据,像LS的程序就是这样。刚开始时,我也是像你仿祥圆一宴拆样,题做到后面,遇到的问题越来越多,只好妥协了^^
编程一段很有意思的旅程,加油!
2.不过,和LZ一样,第一次作这道题,我也是枚举:-),也是 RUNTIME ERROR ,备塌郁闷了好久,问了好多同学,才知道,是数组开小了,把“p[100],e[100],i[100],d[100]”数量级都改为1000就好了,因为onlinejudge的测试数据都蛮大的,100往往是不够把所有数据都保存的
3.其实ACM的题大多不是要求你保存数据,而是一个数据计算一次,然后输出,再处理另一个数据,像LS的程序就是这样。刚开始时,我也是像你仿祥圆一宴拆样,题做到后面,遇到的问题越来越多,只好妥协了^^
编程一段很有意思的旅程,加油!
展开全部
我觉得你的程序写的有些罗嗦了
这猛颤道题段旅用同余求得满足条件的等式就枝燃败可以了
这是我的代码 能ac的
/*pku1006*/
#include <stdio.h>
main()
{
long a,p,e,i,d,t=0;
while(1)
{
scanf("%ld%ld%ld%ld",&p,&e,&i,&d);
if(p==-1 && e==-1 && i==-1 && d==-1) break;
a=(5544*p+14421*e+1288*i-d+21252)%21252;
if(!a) a=21252;
printf("Case %ld: the next triple peak occurs in %ld days.\n",++t,a);
}
}
这猛颤道题段旅用同余求得满足条件的等式就枝燃败可以了
这是我的代码 能ac的
/*pku1006*/
#include <stdio.h>
main()
{
long a,p,e,i,d,t=0;
while(1)
{
scanf("%ld%ld%ld%ld",&p,&e,&i,&d);
if(p==-1 && e==-1 && i==-1 && d==-1) break;
a=(5544*p+14421*e+1288*i-d+21252)%21252;
if(!a) a=21252;
printf("Case %ld: the next triple peak occurs in %ld days.\n",++t,a);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
int main()
{
int b[3],n[3],y[3],d,i,M,days,times=1;
int m[3]={23,28,33};
M=m[0]*m[1]*m[2];
cin >>b[0]>>b[1]>>b[2]>>d;
while(b[0]!=-1)
{
days=0;
for(i=0;i<3;i++)
b[i]=b[i]%m[i];
for(i=0;i<3;i++)
{
int j=1;
n[i]=M/m[i];
while((n[i]*j)%m[i]!=1)
j++;
y[i]=j;
}
for(i=0;i<3;i++)
days=days+b[i]*y[i]*n[i];
days=(days+M)%M;
days=days-d;
if(days<=0)days+=M;
cout <<"Case "<<times<<"橘兆: the next triple peak occurs in "<<days<<"氏伍碰 days."<<endl;
times++;
cin >>b[0]>歼谈>b[1]>>b[2]>>d;
}
reutrn 0;
}
using namespace std;
int main()
{
int b[3],n[3],y[3],d,i,M,days,times=1;
int m[3]={23,28,33};
M=m[0]*m[1]*m[2];
cin >>b[0]>>b[1]>>b[2]>>d;
while(b[0]!=-1)
{
days=0;
for(i=0;i<3;i++)
b[i]=b[i]%m[i];
for(i=0;i<3;i++)
{
int j=1;
n[i]=M/m[i];
while((n[i]*j)%m[i]!=1)
j++;
y[i]=j;
}
for(i=0;i<3;i++)
days=days+b[i]*y[i]*n[i];
days=(days+M)%M;
days=days-d;
if(days<=0)days+=M;
cout <<"Case "<<times<<"橘兆: the next triple peak occurs in "<<days<<"氏伍碰 days."<<endl;
times++;
cin >>b[0]>歼谈>b[1]>>b[2]>>d;
}
reutrn 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询