杭电ACM2098 我哪里出问题了啊,求高手解答,万分感谢!
//******************************************************************************
// 分拆素数和 代码已AC 可参考
//******************************************************************************
#include
#include
int main()
{
int a, e, i, n;
while(scanf("%d", &a)&&a!=0)
{
e = 0;
for(i = 2; i < a / 2; i++) // 注意在检测素数时减少循环次数即可
{
for(n = 2; n <= sqrt(i) && i % n; n++);
if(n > sqrt(i)) //i为素数时判断a-i是否也是素数
{
for(n = 2; n < sqrt(a - i) && (a - i) % n; n++);
if(n > sqrt(a - i)) //a-i是素数 则累加e
e++;
}
}
printf("%d\n", e);
}
}
//祝学习进步,更上一层楼 *^_^* !
怎样使用杭电acm
这里有说明:
http://acm.hdu.edu.cn/faq.php
如果你已经注册了帐号,登录后点击Problem Archive进入题库,以第一个题目
a+b为例,如果你用的是c语言的话
#include
int main()
{
int a, b, c;
while (scanf("%d%d", &a, &b) != EOF) // 这个是输入到文件结束的意思
{
c = a + b;
printf("%d\n", c);
}
return 0;
}
杭电acm1008求助!!!!
指出几点错误
1、输入是以0结束,而不是以EOF结束
2、不是每层都要算stop,只是在停留的那层要算,所以stop只要加上电梯停得次数即可,你可以先别考虑停留的时间,最后在加上5*m就好
3、最开始是total没赋值为0
代码你自己改吧,还有虽然一起算可以减少作乘法的次数,但你多了很多if判断,效率高不了多少,再说卡这些常数没什么意思,还是代码复杂了,增加了出错的机会,得不偿失。贴上我的代码
#include
#include
using namespace std;
int main()
{
int n,i,cur,sum;
while(scanf("%d",&n)&&n){
sum=cur=0;
for(i=1;i<=n;i++){
int tmp;
scanf("%d",&tmp);
if(tmp>cur){
sum+=6*(tmp-cur)+5;
}
else sum+=4*(cur-tmp)+5;
cur=tmp;
}
printf("%d\n",sum);
}
}
杭电ACM网能进去但是登录不了,求解释!
主要问题:
(1)笔误
for(j=0;j<m;j++) //错for(j=0;j<n;j++)
if(a[i]==b[j]) //错if(a[i]!=a[j])
(2)没有排序
以下修改可以AC:
#include<stdio.h>
#include <stdlib.h> //加
int comp(const void *x, const void *y) //加
{
return *((int *)x) - *((int *)y);
}
int main (void)
{
int n,m,i,j,a[10000],b[10000],flag,t;
while(scanf("%d%d",&n,&m)) //while(scanf("%d%d",&n,&m)!=EOF)
{
if (n==0&&m==0) break; //加
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a, n, sizeof(a[0]), comp); //加
for(j=0;j<m;j++) //for(j=0;j<n;j++)
scanf("%d",&b[j]);
qsort(a, n, sizeof(a[0]), comp); //加
t=0; //加
for(i=0;i<n;i++)
{
flag=1;
for(j=0;j<m;j++)
{
//flag=0;
if(a[i]==b[j]) //if(a[i]!=a[j])
{
flag=0;//flag=1;
//t=a[i];
break;
}
//else
//break;
}
if(flag==1)
{
t++;
printf("%d ",a[i]);//printf("%d ",t);
}
}
if(t==0)//if(flag==0)
printf("NULL");
printf("\n");
}
return 0;
}
杭州电子科技大学acm2000题 答案似乎是对的 但是submit 的时候,就是答案不对。求助啊。。。。。
#include
#include
int main()
{
char a[4],t;
int i,j;
while(scanf("%s",a)==1)
{
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
if(a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("%c %c %c\n",a[0],a[1],a[2]);
}
}
关于杭电ACM的水题
//终于出来了...真变态啊
#include <stdio.h>
main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF&&n>=1&&n<=10) //这边还要加&&n>=1&&n<=10不然老是PE 你的也一样 只要加一下条件
{
if(n==1)
for(i=1;i<=n;i++)
printf("\n");
for(i=1;i<n-1;i++)
{
printf("%3d",4*(n-1)-i+1);
for(j=(n-2);j>0;j--) printf(" ");
printf("%3d",n+i);
printf("\n");
}
for(i=4*(n-1)-n+2;i>4*(n-1)-2*n+2;i--)
printf("\n");
}
}
杭电 ACM题老师出错!
这道题用你的代码 如果n=20 m=15
你看看输出多少?
是0
为什么
原因有点多
long的范围不够大
你先求x的阶乘那里就溢出了 然后s=x/y 结果取整数是0
避免溢出的方法可以这样:
x,y用双精度浮点数表示 乘一个x立即除以一个y
最后对s四舍五入输出
看代码:
#include
double sq(int *_point1,int *_point2);
void main()
{
int t;
int n,m;
int *p1,*p2;
p1=&n; p2=&m;
scanf("%d",&t);
while (t>0)
{
t--;
scanf("%d%d",p1,p2);
if (*p1<*p2) printf("0\n");
else printf("%.lf\n",sq(p1,p2));
}
}
double sq(int *_point1,int *_point2)
{
int i,j;
double s=1;
if (*_point2>*_point1/2) *_point2=*_point1-*_point2;
for(i=*_point2,j=*_point1;i>=1;i--,j--)
s*=j/(i*1.0);
return s;
}
哪位大牛能帮我看看我写的hdu_1789的代码哪错了,测试数据都对。
#include#include#include#includeusing namespace std;const int MAX=1010;int t,n,sum,j;int flag[MAX];typedef struct homework{int deadline;int score;}limt;limt c[MAX];int cmp(const void *a,const void *b){if((*(limt *)a).score!=(*(limt *)b).score)return (*(limt *)b).score - (*(limt *)a).score; // 把 > 改成 -elsereturn (*(limt *)a).deadline - (*(limt *)b).deadline; // 把 > 改成 -}int main(){scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&c[i].deadline);}for(int i=0;i<n;i++){scanf("%d",&c[i].score);}qsort(c,n,sizeof(c[0]),cmp);memset(flag,0,sizeof(flag));sum=0;for(int i=0;i<n;i++){for(j=c[i].deadline;j>0;j--){if(flag[j]==0){flag[j]=1;break;}}if(j==0){sum+=c[i].score;}}printf("%d\n",sum);}//system("pause");return 0;}