用C语言帮我写一个函数(急)

f_q_z 2007-09-12 11:28:33
帮我写个函数,用C语言(不能使用递归、循环):
要求:
输入:1,输出:1
输入:2,输出:2
输入:3,输出:3
输入:4,输出:5
输入:5,输出:6
输入:6,输出:7
输入:7,输出:8
输入:8,输出:9
输入:9,输出:10
输入:10,输出:10
输入:11,输出:12
输入:12,输出:13
输入:13,输出:15
输入:14,输出:16
输入:15,输出:17
...
...
...
也就是在输出里不能出现含有4的数字(也就是输出的数字里不论是哪一位都不能有4),编写一函数输入一数字得出输出数字。
不得使用递归、循环
...全文
901 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
chendongpinggood 2007-09-14
  • 打赏
  • 举报
回复
楼主大哥,请问你输入题目的时候是不是输错了

输入:10 输出:10

这句?
_石头_ 2007-09-13
  • 打赏
  • 举报
回复
弄出来后能不能追加点数阿!5分也太寒碜了!和这个问题的劳动强度不匹配阿!^_^
erwin1984 2007-09-13
  • 打赏
  • 举报
回复
不能用递归,循环,那只能用公式? 还是在算法复杂度上达到一定程度即可?

如果只能用公式的话,那得找个数学厉害的人来推理吧。
JGood 2007-09-13
  • 打赏
  • 举报
回复
不用递归、循环,那么使用goto语句了

/**
* 获取偏移
* 如:now=14,则偏移为2
*/
int GetRemovedNum(int now)
{
int temp, i; /* 临时变量 */
int removedNum = 0; /* 偏移数 */

i = 1;

l1: if (i <= now)
{
temp = i;
l2: if (temp > 0)
{
if (temp % 10 == 4)
removedNum++;
}
else
{
i++;
goto l1;
}

temp = temp / 10;

goto l2;
}
else
goto l3;

l3: return removedNum;
}


void main()
{
int i;

l: printf("input: ");
scanf("%d", &i);

printf("output: %d\n", i + GetRemovedNum(i));
goto l;
}
枫舞的季节 2007-09-13
  • 打赏
  • 举报
回复
给出一个范围,然后 把这些数的结果写入一个表中,然后用输入的数做为下标查表的方法可以全部查找出来。这样可以既不用循环也不用递归,也不用goto 了。
sanyuesanshi 2007-09-13
  • 打赏
  • 举报
回复
哦,错了只考虑了个位,汗一下
sanyuesanshi 2007-09-13
  • 打赏
  • 举报
回复
a前面少写了个int而已,我运行了一下,没有问题的啊
f_q_z 2007-09-13
  • 打赏
  • 举报
回复
要求:
输入:1,输出:1 输入:2,输出:2
输入:3,输出:3 输入:4,输出:5
输入:5,输出:6 输入:6,输出:7
输入:7,输出:8 输入:8,输出:9
输入:9,输出:10 输入:10,输出:11
输入:11,输出:12 输入:12,输出:13
输入:13,输出:15 输入:14,输出:16
输入:15,输出:17 输入:16,输出:18
输入:17,输出:19 输入:18,输出:20
输入:19,输出:21 输入:20,输出:22
输入:21,输出:23 输入:22,输出:25
输入:23,输出:26 输入:24,输出:27
输入:25,输出:28 输入:26,输出:29
输入:27,输出:30 输入:28,输出:31
输入:29,输出:32 输入:30,输出:33
输入:30,输出:35 输入:32,输出:36
输入:33,输出:37 输入:34,输出:38
输入:35,输出:39 输入:36,输出:50
输入:37,输出:51 ...
... ...
也就是在输出里不能出现含有4的数字(输出的数字里不论是哪一位都不能有4),编写一函数输入一数字得出输出数字。
不得使用递归、循环
f_q_z 2007-09-13
  • 打赏
  • 举报
回复
楼上的也不行的
f_q_z 2007-09-13
  • 打赏
  • 举报
回复
100万以内吧
要是真的不行那我只好每次都从1算起了....这是笨的办法........
愿大家给出一个好的方案
sanyuesanshi 2007-09-13
  • 打赏
  • 举报
回复
ls的有点问题,如input=13,则a=1,b=3,return=14;
应该如下
int f(int input)
{
a=input/10;
int ans=input+a;
if(ans>=a*10+4)
ans++;
return ans;
}
plscn 2007-09-13
  • 打赏
  • 举报
回复
问一句,有没有数据范围,如果没有范围解决起来很麻烦的。
f_q_z 2007-09-13
  • 打赏
  • 举报
回复
有没有解决办法?这个我也不知道......
望通过大家讨论能够实现...
谢谢各位了,继续
shu_yoyo 2007-09-13
  • 打赏
  • 举报
回复
学习了
tantaiyizu 2007-09-13
  • 打赏
  • 举报
回复
需求无止境?
jeans83 2007-09-13
  • 打赏
  • 举报
回复
这个可以实现么??
思索好久....没有头绪
f_q_z 2007-09-13
  • 打赏
  • 举报
回复
还没能解决我的问题......大家继续...
plscn 2007-09-13
  • 打赏
  • 举报
回复
的确有问题,正在进一步思索,可以实现100各数据的输出,但是当超过100各数据后就会出现再次数据循环出现的问题。晚上在继续
CoffeeCN 2007-09-13
  • 打赏
  • 举报
回复
我靠,结贴了
CoffeeCN 2007-09-13
  • 打赏
  • 举报
回复
昨天睡觉前没看清题目,这种未给定输入数大小的题目不可能不用循环
思路其实很简单,输出的数output就是输入的数input加上出现4的次数
也就是 output = input + n;

int func(int input)
{
int a, b, output, i;

output = 0;
a = input;
i = 1;

do
{
b = a % 9;
a /= 9;
if (b < 4)
output += a * i;
else
output += (a + 1) * i;
i *= 10;
} while (a);

return output + input;
}

算法也相当简单,测试过100000以内的数,全部正确,算法复杂度O(log10n)
看了楼上的各位同志算法都或多或少有问题

下班,回家 HOHO
加载更多回复(24)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧