| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2630 人关注过本帖
标题:[讨论][开源]第十七期编程题目.
只看楼主 加入收藏
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
以下是引用crackerwang在2007-5-30 12:12:07的发言:

昨天晚上想出来的的.感觉还是没有Eastsun的思路强.看来我DP还是没有学会


其实我用的不是DP,呵呵


My BlogClick Me
2007-05-30 12:53
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

我当时也注意到A!的阶乘比小于它所有的数字的阶乘之和都要大,但是没有发现最大的那个A(A!<N)刚好是其中的一个元素。刚开始我还觉得有问题。刚才拿笔算了一下。终于搞明白是怎么回事了


2007-05-30 13:33
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
呵呵,楼上完全明白了我的代码了.很不错~

My BlogClick Me
2007-05-30 13:39
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 

ps: zju1222也是个与阶乘有关的题,难度比上面几个大得多,有兴趣的可以做做~

http://acm.zju.edu.cn/show_problem.php?pid=1222


My BlogClick Me
2007-05-30 14:30
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

这个题目当时我做过.当时我想到了那个log5(n)的算法我都没有写出来.这里的测试数据都到100^100要用到高精度.郁闷好几天
POJ上有同样一个题目数据弱了不少,很容易过


2007-05-30 14:48
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 

这个题的测试数据确实有些BT,不过其中的高精度只要实现除法就OK了,也不麻烦.


My BlogClick Me
2007-05-30 14:54
yang522425
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-5-29
收藏
得分:0 
前几天刚去ACM比赛回来,发现的那些名校的人有好大的差距
2007-05-30 14:59
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
后来我写了一个没有通过.只好找前辈们借一个看了一下.他都写了快100行了.顿时我就晕了

[此贴子已经被作者于2007-5-30 17:11:20编辑过]


2007-05-30 16:57
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
以下是引用crackerwang在2007-5-30 16:57:47的发言:
后来我写了一个没有通过.只好找前辈们借一个看了一下.他都写了快100行了.顿时我就晕了

100行?没这么夸张吧,
这是我写的代码:


#include<stdio.h>
#include<stdlib.h>
int m2[]={1,4}, m4[] ={1,2,4,3};
int lsr(char buf[],int* start,int end){
int s=*start,t =0,tt;
if(*start>end) return -1;
while(s<=end){
tt=buf[s];
buf[s]=(tt+t)/5;
t= ((tt+t)%5)*10;
s++;
}
while(!buf[*start]&&*start<=end+1) (*start)++;
return t/10;
}
int solve(char buf[],int length){
int start=0,n1=0,n2=0,k=0,mod,m;
if(length==1&&buf[0]<=1) return 1;
while((mod=lsr(buf,&start,length-1))>=0){
n2+=mod*k;
if(mod==2) n2++;
if(mod==4) n1++;
k++;
}
m= m2[n1%2]*m4[n2%4]%5;
return m&1?m+5:m;
}
main(){
char buf[200];
int k,len;
while(scanf(\"%s\",buf)!=EOF){
len =strlen(buf);
for(k=0;k<len;k++) buf[k]-='0';
printf(\"%d\n\",solve(buf,len));
}
return 0;
}

应该还可以再简单些

My BlogClick Me
2007-05-30 18:01
lihy114
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-5-15
收藏
得分:0 
呵呵 ,自己写的,觉得和你们的差距太大了
main()
{int i,j=1,m=1,b=0,n;
int a[10];
for(n=0;n<10;n++)
scanf("%d\n",&a[n]);
for(n=0;n<10;n++)
{b=0;m=1;j=1;
do{m=m*j;
b=b+m;
j++;}
while(b<a[n]);
if(b==a[n])printf("yes\n");
else printf("no\n");}
}

要好好的把你们的研究一下

俺妈跟俺说:低调!!!!
2007-05-30 21:04
快速回复:[讨论][开源]第十七期编程题目.
数据加载中...
 
   



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

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