| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2686 人关注过本帖
标题:[求助]一个递推题,总错第九个数据
取消只看楼主 加入收藏
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
把序列的每一项用数组S[1..2002]存储,S[1]= K^0=1;以后加入k的x(x=1,2,3,…)次方后,依次加入这项与第一项到他前面一项的和组成的项,直到总项数等于N或者超过N一些时停止加入项,输出S[N]即可。

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-12 23:19
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用leeco在2007-8-13 0:06:17的发言:

嗯,这算法应该对的,就是慢了点。

可是无论如何第9个数据总是过不了,如果数组用int只能过6个数据,数组用double只能过9个数据(第9个过不了),甚至为了数据正确我使用高精度计算,竟然也只能过6个数据


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-13 08:44
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用HJin在2007-8-13 12:39:30的发言:

/*---------------------------------------------------------------------------
File name: NKU1021-[NKPC2]?S???.c
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 8/12/2007 21:29:53
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762


Modification history:
===========================================================================


I think I discussed this problem with Leeco before. Bottom of line is:

write out the binary representation of n.

Following is my code submitted to Nankai online judge.
*/

long long b[] = {1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467, 3486784401, 10460353203, 31381059609, 94143178827, 282429536481, 847288609443, 2541865828329, 7625597484987, 22876792454961, 68630377364883, 205891132094649, 617673396283947};

int main()
{
int k;
unsigned n;

while( scanf("%u", &n) != -1 )
{
--n;
k=0;

while(n)
{
if(n&1)
printf("%lld\n", b[k]);

++k;
n >>= 1;
}
}

return 0;
}

与这道题不完全一样,输入样例后过不了,这道题的规模在int内,不需要long long


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-13 16:32
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用mp3aaa在2007-8-13 17:44:30的发言:
晕了 我的程序就差一点 在 标准和错误上面看 应该就差 n-1 。。。
译通过...
├ 测试数据 01:答案错误...
 ├ Hint: 原├ 测试数据  ├ 标准行输出 19500
 ├ 错误行输出 19497
├ 测试数据 02:答案错误...
 ├ Hint: 原├ 测试数据  ├ 标准行输出 823550
 ├ 错误行输出 823549
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案错误...
 ├ Hint: 原├ 测试数据  ├ 标准行输出 235793426
 ├ 错误行输出 235793422
├ 测试数据 08:答案错误...
 ├ Hint: 原├ 测试数据  ├ 标准行输出 1111101000
 ├ 错误行输出 1111100997
├ 测试数据 09:答案错误...
 ├ Hint: 原├ 测试数据  ├ 标准行输出 2019422348
 ├ 错误行输出 -2142626082
├ 测试数据 10:答案正确... 0ms
-------------------------

又看到这个结果了,我用int,unsigned和高精度都是这个结果,也不知道为什么,你换成double可以看到结果是90分


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-13 17:47
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用mp3aaa在2007-8-13 17:48:40的发言:

这个算法应该没有错啊

我也是这么想的,因为10个数据可以过9个...运算中的精度问题也可以排除,因为我用高精度也只过6个,我提交了10多次,依旧不AC,所以才发出来请教大家的


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-13 17:53
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
可是用那个进制法求为什么第九个数据就AC呢?

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-13 18:12
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
我的int和double版都被我的高精度程序给覆盖了,所以只能把我的高精度程序发出来

#include<stdio.h>
#include<math.h>
typedef int SUN;
SUN s[2005][12]={0};
void q(SUN m[],SUN n[],SUN x[])
{
int i;
for(i=11;i>0;i--) { x[i]+=m[i]+n[i]; x[i-1]+=x[i]/10; x[i]=x[i]%10; }
}
void p(SUN m,SUN n,SUN x[])
{
int i,j;
int r=11;
x[r]=1;
for(i=0;i<n;i++)
{
for(j=11;j>=r;j--)
{
x[j]*=m;
}
for(j=11;j>=r;j--)
{
x[j-1]+=x[j]/10;
x[j]=x[j]%10;
}
if(r-3>-1) r-=3;
}
}

int main(void)
{
int K,N;
int i,t=2,j=2;
scanf("%d%d",&K,&N);
s[1][11]=1;
s[2][11]=K%10;
s[2][11]=K/10;
while(j<N+2)
{
for(i=1;i<j;i++) q(s[i],s[j],s[i+j]);
j=j+i;
p(K,t,s[j]);
t++;
}
i=1;
while(!s[N][i++]) ;
for(--i;i<12;i++)
printf("%d",s[N][i]);
return 0;
}

结果与int一样

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-13 18:18
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用leeco在2007-8-13 18:51:56的发言:
15 1000的结果超int型了,我过了说明他测试数据没那么刁钻。
15 1000应该是41189262750,用unsigned够了

题目明确说明:保证输出数据在2^31以内,所以表示用int完全可以,不需要用极端数据15 1000测试,我用过unsigned,同样过6个数据


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-14 08:34
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用mp3aaa在2007-8-13 18:31:14的发言:

这个是我的 算法好像一样吧
#include <stdio.h>
#include<math.h>
int main()
{
int k ,n,i,j,m,t,L,y;
int a[1000]={0};
a[0]=1;
while(scanf("%d%d",&k,&n)!=EOF){
j=1,t=0,L=1,y=2;
for(m=0;m<n;m++)
{
if(j+1==y){
y=y*2;
t=pow(k,L++);
a[j++]=t;
i=0;
continue;
}
a[j++]=t+a[i++];
}
printf("%d",a[n-1]);

}
}

把数组开大一点,小心越界


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-14 08:35
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用yu_hua在2007-8-14 10:52:13的发言:

//回复11楼:

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
short x=0,s[2002];
short i,j,n,k;
cin >> k >> n;
i=1;//原来的0改为1就成功啦
while(i<=n)
{
s[i]=(short)pow(k,x);
x++;
for(j=1;j<i;j++)
{
if(i+j>=2002)return -1;
s[i+j]=s[i]+s[j];
}
i=i+j;
}
cout<<s[n]<<endl;
return 0;
}

明显通过不了,short的范围在int之内了,太小了,估计也就过2-3个测试点就不错了


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-14 10:55
快速回复:[求助]一个递推题,总错第九个数据
数据加载中...
 
   



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

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