| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1467 人关注过本帖
标题:[求助]一道acm的题!
只看楼主 加入收藏
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

还有能帮我回答一下9楼的问题吗?谢谢了!


该学习了。。。
2006-12-09 18:14
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

又写了一个,好像用时更多了!
#include <stdio.h>

int main()
{
long s, m, i;
long a(long n);

scanf("%ld", &s);
for(i = 1;i <= s;i ++)
{
scanf("%ld", &m);
if(m == 1)
printf("%ld %ld %d\n", i, m, 3);
else
printf("%ld %ld %ld\n", i, m, a(m));
}

return 0;
}

long a(long n)
{
long sum = 0;

if(n == 1)
sum = 3;
else if(n == 2)
sum = 5;
else if(n == 3)
sum = 9;
else
sum = a(n - 1) + a(n - 2) - 1;
return sum;
}


该学习了。。。
2006-12-09 19:11
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

又写了一个,还是不对啊!
#include <stdio.h>

int main()
{
int s, m, i, j, k;
int sum;

scanf("%d", &s);
for(i = 1;i <= s;i ++)
{
sum = 0;
scanf("%d", &m);
if(m == 1)
printf("%d %d %d\n", i, m, 3);
else if(m == 2)
printf("%d %d %d\n", i, m, 5);
else if(m == 3)
printf("%d %d %d\n", i, m, 9);
else
{
for(k = 4;k <= m;k ++)
for(j = 2;j <= i - 2;j ++)
{
if(i%j == 0)
continue;
else if(i%2 == 0&&j%2 == 0)
continue;
else
sum ++;
}
sum += (3 + 2*(2*m -3));
printf("%d %d %d\n", i, m, sum);
}
}

return 0;

}


该学习了。。。
2006-12-09 19:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
sum += (3 + 2*(2*m -3));
我企图也是这样想的,差不多的公式.不过没什么用,你的思路是怎样的?

倚天照海花无数,流水高山心自知。
2006-12-09 19:44
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
我想前三个单独列给出来,2*(2*m - 3) + 3这是固定的!然后其他的只要是没有公约数就行!不知对不对!

该学习了。。。
2006-12-09 19:52
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

这回结果对了!又超时了!真是愁死我了!
#include <stdio.h>

int main()
{
int s, m, i, j, k;
int sum;
int f(int a,int b);

scanf("%d", &s);
for(i = 1;i <= s;i ++)
{
sum = 0;
scanf("%d", &m);
if(m == 1)
printf("%d %d %d\n", i, m, 3);
else if(m == 2)
printf("%d %d %d\n", i, m, 5);
else if(m == 3)
printf("%d %d %d\n", i, m, 9);
else
{
for(k = 4;k <= m;k ++)
for(j = 2;j <= k - 2;j ++)
if(f(k, j))
sum ++;
sum = (3 + 2*(2*m -3)) + 2*sum;
printf("%d %d %d\n", i, m, sum);
}
}

return 0;

}

int f(int a,int b)
{
int i, c;

c = a > b ? b : a;
for(i = 2;i <= c;i ++)
if(a%i == 0&&b%i == 0)
return 0;
return 1;
}



该学习了。。。
2006-12-09 20:02
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 
其实就是考虑两数互为素数问题~~~
只不过一步一步求好象时间上不行~~~至于找图形的规律,暂时还没发现.
有一个比较xx的方法....就是先用超时算法把前1000项弄出来,然后.......
2006-12-09 20:27
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 
楼主把网站发给偶下,偶写了一个,去试试...
2006-12-09 20:29
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
http://acm.hit.edu.cn/ojs/show.php?Proid=2416&Contestid=0素数我也试过了!超时了!

该学习了。。。
2006-12-09 20:31
剑风曲
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2006-11-16
收藏
得分:0 
Runid Proid Subtime Judgestatus Runtime Memory Code Length Author
133188 2416 2006-12-09 20:49:48 Accepted 0.11 s 672 K 417 B ken

偶就是ken ~~~通过了挖哈哈~~~下面是偶的代码
#include<stdio.h>
int p(int x,int y){
if(y==0)return x;
else return p(y,x%y);
}
int main(){
int n;
scanf("%d",&n);
int a[1002],i,j;
a[0]=0;a[1]=3;
for(i=2;i<1001;i++){
a[i]=a[i-1];
for(j=1;j<i;j++){
if(p(i,j)==1)a[i]+=2;
}
}
for(j=0;j<n;j++){
scanf("%d",&i);
printf("%d %d %d\n",j+1,i,a[i]);
}
}
2006-12-09 20:51
快速回复:[求助]一道acm的题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023878 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved