搜索
查看: 656|回复: 6
打印 上一主题 下一主题

挑战26答案有问题么?

[复制链接]
跳转到指定楼层
楼主
发表于 2015-8-27 01:02:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include<stdio.h>
int u=0,l=0;
void fun(int i,int k,int m)
{
if(k==1)
{
if(i>u)
{
u=i;
l=m;
printf("%d需要%d步\n",l,i);
}
return;
}
if(k%2==1){
i++;
        fun(i,3*k+1,m);
}
if(k%2==0)
{i++;
        fun(i++,k/2,m);

}
}
void main()
{

int i;
for(i=1;i<1000000;i++)
fun(0,i,i);
printf("%d\n",l);
getchar();
return;
}
大神复制一下,我算的有问题么?25也是用这个算的啊?

沙发
 楼主| 发表于 2015-8-27 18:14:55 | 只看该作者
顶啊,是系统答案的错误?还是我的错?
板凳
 楼主| 发表于 2015-8-27 18:15:04 | 只看该作者
顶啊,是系统答案的错误?还是我的错?
地板
发表于 2015-8-28 22:30:05 | 只看该作者
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int s;
int collatz(int n)
{
    s++;
        if(n==1)  return;
    if(n%2==1) return collatz(3*n+1);
    if(n%2==0) return collatz(n/2);
}
int main()
{
        int x,a[10001];
        for(x=1;x<=10000;x++)//范围中哪个数变为1需要转化的步骤多
    {
                s=-1;//即使n=1,也调用一次collatz,,但用了0步,所以s=-1是机智的
        collatz(x);
        a[x]=s;
    }
    int m=a[1],i;
    for(i=1;i<=10000;i++)
    {
                if(a>m) m=a;
    }
    for(i=1;i<=10000;i++)
    {
                if(m==a)  {printf("%d变为1需要转化的步骤多\n",i);break;}
    }
        system("pause");
        return 0;
}
[/mw_shl_code]
然而只能对付挑战25
5#
发表于 2015-8-28 22:32:57 | 只看该作者
福华 发表于 2015-8-28 22:30
[mw_shl_code=c,true]#include
#include
int s;

把相应范围改成挑战26要求的,程序崩溃,因为数组存不下海量的数字,得想个办法
6#
 楼主| 发表于 2015-8-29 15:44:06 | 只看该作者
不是得,我的思路和你不一样,我没有用到数组存储数字,全是递归问题,所以我的程序应该不会出现溢出现象。
7#
发表于 2015-9-4 16:12:53 | 只看该作者
挑战题全部参考源码来这里下载,欢迎好评,http://www.ahalei.com/thread-7812-1-1.html
点击这里下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表