这题怎么搞?
时间:2008-05-30 09:28:00
来源:论坛整理 作者: 编辑:chinaitzhe
Input
输入有多个测试数据,每行一个 -2147483647 <n <2147483647
Output
每行输出一个对应的f(n)
Sample Input
50025002
50025000
Sample Output
50024997
50026995
Hint
递归嵌套层数过多会导致Runtime Error 或 Memory Limit Exceeded
要害是怎么解决内存问题,是不是把递归函数专为非递归的? 怎么转啊?
网友回复:int f(int x)
{
if (x>50025002)
return x-5;
if (0 <x <50025002)
return ((a-x)/2005 1)*2000 x-5;
}
网友回复:上面那个a就是50025002
网友回复:没环境测试,可能不对哈。。
网友回复:提交了下,他说wrong answer,能说下思路吗,我没看明白..
网友回复:希奇,计算两个测试值没错,提交却说我错了,难道是我写的不对?
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ #include <stdio.h> int f(int i) { if(i>=50025002) return i-5; else return ((50025002-i)/2005 1)*2000 i-5; } int main(void) { int i; while(1==scanf("%d",&i)) printf("%d\n",f(i)); return 0; }
网友回复:你机器的整型值能表示50025002???
网友回复:int显示50025002 没问题吧。。
#include "stdio.h"
int f(int x)
{
if (x <0) return 0;
return (0 <x&&x <50025002)?(((50025002-x)/2000 1)*2000 x-5):(x-5);
}
int main()
{
printf("%d\n",f(1));
printf("%d\n",f(1234));
return 0;
}
这个应该没问题了。上午的程序那个分母应该是2000。
网友回复:思路:其实小于那个数加2005 再减掉5等于就是加了2000。上午的程序那个分母是2005是没有考虑到减掉5的中途可能就已经小于那个数了。所以每次加2000直到超过那个数,再减掉5就行。
网友回复:额.还是报错
http://acm.nankai.edu.cn/p1002.html
关键字:
上一篇:输入输出函数说类型不匹配怎么办?
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面