当前位置: 代码迷 >> C语言 >> [求助]一个递推题,总错第九个数据
  详细解决方案

[求助]一个递推题,总错第九个数据

热度:133   发布时间:2007-08-13 00:34:23.0
晕。。。不就是进制变换吗?
----------------解决方案--------------------------------------------------------
哇 天书原来是这样的
----------------解决方案--------------------------------------------------------
以下是引用leeco在2007-8-13 0:06:17的发言:

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

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


----------------解决方案--------------------------------------------------------
回复:(卧龙孔明)编号 0 1 2 3 ...

/*---------------------------------------------------------------------------
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;
}


----------------解决方案--------------------------------------------------------
以下是引用leeco在2007-8-12 22:24:59的发言:

这个Judge现在有问题,全部的CODE都判成编译错,我觉得这个代码应该没问题

程序代码:

#include <stdio.h>

int main()
{
int k,n;
while(scanf(\"%d %d\",&k,&n)!=EOF){
int res=0,t=1;
while(n){
if(n%2){
res+=t;
}
t*=k;
n/=2;
}
printf(\"%d\n\",res);
}
}


正常了,过了

你的算法很好啊
不过有个问题想请教
这个程序似乎算不到 N 1000 为什么能过呢?


----------------解决方案--------------------------------------------------------
以下是引用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


----------------解决方案--------------------------------------------------------
晕了 我的程序就差一点 在 标准和错误上面看 应该就差 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
-------------------------


----------------解决方案--------------------------------------------------------
以下是引用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分


----------------解决方案--------------------------------------------------------

这个算法应该没有错啊


----------------解决方案--------------------------------------------------------
以下是引用mp3aaa在2007-8-13 17:48:40的发言:

这个算法应该没有错啊

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


----------------解决方案--------------------------------------------------------
  相关解决方案