杭电ACM2045 ,2028下面是我的代码
#include<stdio.h>#include<math.h>voidmain(){inta,b=1;__int64x;while(scanf("%d",&a)!=E...
#include<stdio.h>
#include<math.h>
void main ()
{ int a,b=1;
__int64 x;
while (scanf("%d",&a)!=EOF)
{if(a==1)
x=3;
else
if(a==2||a==3)
x=6;
if(a>3)
x=(__int64)pow(2,a-3)*9;
printf("%I64u\n", x);
}
}
#include<stdio.h>
int gongyueshu(int a,int b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
while(a%b)
{
temp=b;
b=a%b;
a=temp;
}
return b;
}
int gongbeishu(int a,int b)
{
return (a*b)/gongyueshu(a,b);
}
int main()
{
int i,n;
__int64 a[8000],tem,x;
while( scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%I64d",&a[i]);
if(n==1)
x=a[0];
else
{ tem=a[0];
for(i=1;i<n;i++)
{
x=gongbeishu(tem,a[i]);
tem=x;}
}
printf("%I64u\n",x);}
}
刚忘了还有这个,为啥都是wrong answer .麻烦给出解释哈 能不能用C写啊,我大一,C++还没教,不是看的很懂,汗........还有GCD啥意思啊 ,麻烦给个C,给个C啊。。。。。。。。。。。。。。。。 展开
#include<math.h>
void main ()
{ int a,b=1;
__int64 x;
while (scanf("%d",&a)!=EOF)
{if(a==1)
x=3;
else
if(a==2||a==3)
x=6;
if(a>3)
x=(__int64)pow(2,a-3)*9;
printf("%I64u\n", x);
}
}
#include<stdio.h>
int gongyueshu(int a,int b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
while(a%b)
{
temp=b;
b=a%b;
a=temp;
}
return b;
}
int gongbeishu(int a,int b)
{
return (a*b)/gongyueshu(a,b);
}
int main()
{
int i,n;
__int64 a[8000],tem,x;
while( scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%I64d",&a[i]);
if(n==1)
x=a[0];
else
{ tem=a[0];
for(i=1;i<n;i++)
{
x=gongbeishu(tem,a[i]);
tem=x;}
}
printf("%I64u\n",x);}
}
刚忘了还有这个,为啥都是wrong answer .麻烦给出解释哈 能不能用C写啊,我大一,C++还没教,不是看的很懂,汗........还有GCD啥意思啊 ,麻烦给个C,给个C啊。。。。。。。。。。。。。。。。 展开
展开全部
首先,2045是通过递推来做的,不是这么简单的一个公式可以搞掂。
AC代码
#include<iostream>
using namespace std;
long long re[55][2];
void init()
{
re[1][1]=3;
re[2][1]=6;
re[3][0]=6;
re[3][1]=6;
for(int i=4;i<=50;i++)
{
re[i][0]=re[i-1][1];
re[i][1]=re[i-1][0]*2+re[i-1][1];
}
}
int main()
{
init();
int n;
while(cin>>n)
{
printf("%I64d\n",re[n][1]);
}
return 0;
}
然后2028,就是求GCD,你子函数用的是int导致越界。
附AC代码
#include<iostream>
using namespace std;
long long a,b,c;
long long gcd(long long a,long long b)
{
if(a==0) return b;
else return gcd(b%a,a);
}
int main()
{
int n;
while(cin>>n)
{
b=1;int i;
for(i=0;i<n;i++)
{
//cout<<i<<endl;
scanf("%lld",&a);
//cout<<i<<endl;
c=gcd(a,b);
b=a*b/c;
}
printf("%I64d\n",b);
}
return 0;
}
GCD就是最大公约数,虽然,我是用C++写的,不过感觉跟C语言的代码差不多,不会读不懂吧
AC代码
#include<iostream>
using namespace std;
long long re[55][2];
void init()
{
re[1][1]=3;
re[2][1]=6;
re[3][0]=6;
re[3][1]=6;
for(int i=4;i<=50;i++)
{
re[i][0]=re[i-1][1];
re[i][1]=re[i-1][0]*2+re[i-1][1];
}
}
int main()
{
init();
int n;
while(cin>>n)
{
printf("%I64d\n",re[n][1]);
}
return 0;
}
然后2028,就是求GCD,你子函数用的是int导致越界。
附AC代码
#include<iostream>
using namespace std;
long long a,b,c;
long long gcd(long long a,long long b)
{
if(a==0) return b;
else return gcd(b%a,a);
}
int main()
{
int n;
while(cin>>n)
{
b=1;int i;
for(i=0;i<n;i++)
{
//cout<<i<<endl;
scanf("%lld",&a);
//cout<<i<<endl;
c=gcd(a,b);
b=a*b/c;
}
printf("%I64d\n",b);
}
return 0;
}
GCD就是最大公约数,虽然,我是用C++写的,不过感觉跟C语言的代码差不多,不会读不懂吧
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好深奥。鼓掌观望
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询